2013-03-29 32 views
0

我對這個問題失去了主意。NSFetchedResultsChangeInsert被1次插入與不同的對象ID調用兩次

所以我有一個核心數據建立在做這樣我的iOS應用: http://www.cocoanetics.com/2012/07/multi-context-coredata/

然後我通過創建臨時MOC(如在博客中解釋)插入一個對象,並執行保存在所有3個臨近關係在performBlock:方法中。

在視圖控制器中我有一個NSFetchedResultsController,它得到通知我確實插入了一個新的對象。問題是NSFetchedResultsChangeInsert被激發兩次,每次通過低谷的對象都有不同的objectID(它也是內存中的一個不同的對象實例)。會發生什麼,然後我有2行插入我的表視圖中,但不是SQL數據庫只有一個新的。當我滾動到表視圖的底部時,它當然會崩潰。

如果我還對該對象執行了一些更新,我只會調用一次NSFetchedResultsChangeUpdate,並調用第二個NSFetchedResultsChangeInsert調用中傳遞的objectID。

第一個ID是這樣的:

<x-coredata:///ReceivedMessage/t605BB9A7-A04E-4B89-B568-65B12E8C259A2>

第二(和所有隨之而來的)是這樣的:

<x-coredata://02A917C5-850F-4C67-B8E4-1C5790CF3919/ReceivedMessage/p28>

有什麼事情這是?我錯過了一些明顯的東西嗎?

PS:我還檢查通知是否來自相同的上下文,線程等。

回答

2

您所看到的兩個ID可能很好地代表了一個對象。它們之間的區別僅在於第一個是在創建時分配給對象的臨時對象ID,第二個是永久對象ID,在將對象存儲到託管對象庫時分配給該對象(請參閱NSManagedObjectID's isTemporaryID) 。

要解決此問題,您可以在保存臨時MOC之前調用NSManagedObjectContext's obtainPermanentIDsForObjects:error:。這樣插入的對象在保存傳播過程中只有一個ID,NSFetchedResultsControllerDelegate方法應該只被調用一次。