我正在開發一個帶有核心數據的iPhone應用程序。所有用戶數據應與我們的服務器同步。爲此,我創建了NSOperation的子類,從我們的Web服務加載新數據並創建相應的託管對象。爲了維護它們之間的關係,每個對象都使用remoteID(它是關係服務器DB的主鍵)進行傳輸。核心數據executeFetchRequest拋出NSGenericException(集合在枚舉時發生了變化)
假設有兩個管理對象:部門< - >>員工。同步工作如下:
從服務器加載所有部門。對於每個部門:創建一個Department對象並設置其RemoteID。
從服務器加載所有員工。對於每個員工:創建員工對象,獲取相關部門(通過remoteID)並將其分配給員工。
抓取一個部門導致了以下異常:
*** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSCFSet: 0x69c8a10> was mutated while being enumerated.<CFBasicHash 0x69c8a10 [0x2d6d380]>{type = mutable set, count = 1424,
entries => <A list of all newly created entities>
*** Call stack at first throw:
0 CoreFoundation 0x02d04919 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x02e525de objc_exception_throw + 47
2 CoreFoundation 0x02d043d9 __NSFastEnumerationMutationHandler + 377
3 CoreData 0x026225d0 -[NSManagedObjectContext executeFetchRequest:error:] + 4400
4 myApp 0x00059de4 +[AppFactory departmentWithRemoteID:inManagedObjectContext:] + 259
的不引發異常每一次。將代碼移到主線程可以解決問題。我不知道什麼是錯的。我在同步線程中創建了一個新的NSManagedObjectContaxt,並通過其NSManagedObjectID傳遞了所有託管對象。
有什麼想法?
對我來說這可能是這類問題的原因。什麼是解決這些問題的最佳方法,你有什麼想法@octy? – 2011-03-18 17:26:56
Adeem,你的問題的一個很好的答案提供了一個鏈接的討論:http://stackoverflow.com/questions/3364769/iphone-nsfetchedresultscontroller-with-delegate-and-data-update-from-a-separate – octy 2011-03-22 18:45:48