簡短問題:您可以用XCode以某種方式重啓後臺進程嗎?在ios上重新啓動後臺選擇器
長的問題:
我編碼與XCode的一個應用程序,包括它的MKMapView標記的聚類算法。每次移動地圖時,簇必須更新,並且在3000個以上的位置需要大約2秒。聚類基本上由所有位置上的for-loop組成,並且只聚類並繪製當前區域可見的位置,計算位置和縮放。由於需要一些時間,我已經將聚類算法作爲後臺進程啓動。
[self performSelectorInBackground:@selector(clusterizeAndStopSpinnerWhenDone) withObject:nil];
正如你現在可以和地圖進行互動,而它的執行後臺集羣,再次移動地圖,而應用程序會導致兩個線程進入同一個for循環:
"Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSArrayM: 0x17cc5060> was mutated while being enumerated.'"
這是固定通過simlpy有一個布爾值告訴應用程序集羣是否已經運行。
這個新的設置工作,但有一件事是糾纏我。這似乎從下面的一組動作:
- 啓動應用程序,初始集羣出現在地圖
- 縮小時,aplication已經工作了一段聚類
- 當應用程序仍在集羣,放大再次出來。
因此,您可以縮小以在地圖上獲取新區域,然後再次縮小。舊的聚類仍在繼續,新的區域未被考慮在內。這會導致與我當前的地圖區域不匹配的羣集。
我希望它在每次移動地圖時都重新啓動集羣,併爲新地區執行此操作,爲此我必須中斷舊集羣並啓動新集羣。這可能嗎?
一旦功能已經開始,可能會很困難。看看NSOperation - 它將允許以更清晰的方式構建代碼並支持取消,同時請注意,如果它被取消,您必須調整集羣函數以便能夠在中間返回 – Vladimir
聽起來有趣,我會研究它。謝謝! – Rkey
NSOperation正是我所期待的。在for循環中,我可以檢查每個循環是否已取消操作,並且可以輕鬆開始新的操作。非常感謝! – Rkey