2012-11-19 50 views
0

我在這裏有一個奇怪的問題。我沒有得到對我的NSManagedObject的「更新」操作的回調,但是插入或移出該實體類型集合的任何對象都會觸發委託回調。Restkit + Coredata - NSFetchedResultsControllerDelegate回調沒有爲更新操作單獨觸發

之前我的問題進一步進行,我想告訴我的設置:

  • NSFetchedResultsController的配置是否正確。確信 所要求的這款蘋果 文件正在被外部修改的屬性沒有任何的fetchedResultsController的 排序鍵:

    當一個對象的狀態,但改變 的最新情況報道屬性不是排序鍵的一部分。

  • 只有一個託管對象上下文中發生這些修改。

  • 由於插入和刪除操作被報告給 委託,我相信有有鬼更新 操作

我鑽下來Restkit代碼RKLogs的幫助,看看恰好映射發生和coredata對象正在更新,以找出沒有得到更新委託回調的原因。

在類RKManagedObjectMappingOperation -performMapping方法,布雷克·沃特斯先生記錄了爲什麼MOC回調不更新時觸發的原因:

- (BOOL)performMapping:(NSError **)error 
{ 
    BOOL success = [super performMapping:error]; 
    if ([self.objectMapping isKindOfClass:[RKManagedObjectMapping class]]) { 
     /** 
     NOTE: Processing the pending changes here ensures that the managed object context generates observable 
     callbacks that are important for maintaining any sort of cache that is consistent within a single 
     object mapping operation. As the MOC is only saved when the aggregate operation is processed, we must 
     manually invoke processPendingChanges to prevent recreating objects with the same primary key. 
     See https://github.com/RestKit/RestKit/issues/661 
     */ 
     [self connectRelationships]; 
    } 
    return success; 
} 

但我不能爲自己的生活搞不清楚如何解決這一問題?因爲它有目的地完成了嗎?

有沒有人遇到同樣的問題?我如何解決它?

感謝, 拉吉爬完

回答

0

有從我的第1級部分的錯誤等1個東西(無知),我不知道是由於它和我面臨這個問題:

錯誤:
儘管有許多的討論遍佈論壇,我是錯誤的陳述我的第二個上市項目:

  • 只有一個管理對象上下文中發生這些修改。

我錯誤地記錄下來,發現我在同樣的情況下!我真笨!

無知:
我做了一些通過RK代碼挖思考有鬼是怎麼回事那裏,檢查布雷克·沃特斯的意見和他的承諾4b394f8c1e1f,看看前面的代碼有(調用-processPendingChanges),這現在被刪除導致任何問題,並且不讓委託人瞭解更新。

發現,這確實是一個單獨的線程,是的,它有它自己的MOC,我已經錯過了。接下來要做的事很簡單,我實現了機制merge changes of a MOC from different thread into main MOC。但是這也不起作用!

原因是我處於應用程序開發的最初階段。我只是使用RestKit將json響應映射到coredata對象,我無處可用!我只是在GDB中記錄了coredata對象,並且始終保持它們的故障狀態!我依靠-objectLoader回調和NSNotification object看到確實有更新可用。在測試的某個時候,我偶然記錄了通知回調中更改的管理對象的屬性,然後將其合併回主MOC。這使託管對象出現故障並加載了託管對象的所有屬性。現在,當輔助線程MOC更改與主線程MOC合併時,我的NSFetchedResultsControllerDelegate回調開始觸發。