需要澄清在SO中有關於NSFetchedResultsController
和委託的許多問題/回覆。有時代表會觸發,有時不會。而且由於核心數據非常複雜,因此很難理解正在發生的事情,而無需花費大量時間。另外,文件說有幾個問題,但沒有列出它們。NSFetchedResultsController和NSFetchedResultsControllerDelegate
有幾個已知的問題和行爲iOS上的不同版本變化 與NSFetchedResultsController。
因此,我需要一些關於這樣的類的行爲的說明。特別是,從文檔那裏被寫入以下:
控制器從而有效地三種操作模式,通過它是否具有一個委託和是否高速緩存文件名被設置確定 。
沒有跟蹤:委託設置爲零。控制器只需 即可提供對數據的訪問,就像執行提取時一樣。
僅限內存跟蹤:該委託非零,並且文件高速緩存名稱 設置爲零。控制器監控其結果集中的對象,並更新 更新部分和訂購信息以響應相關的 更改。
完全持久性跟蹤:委託和文件高速緩存名稱是非零無效的 。控制器監視結果集中的對象並更新 部分和響應相關更改的訂購信息。 控制器維護其 計算結果的持久高速緩存。
我正在開發一個相當複雜的應用程序,我利用NSFetchedResultsController
從商店檢索數據並將它們顯示在表中。 顯示的管理對象有一個syncStatus
布爾變量來驗證它們是否與外部服務同步。 syncStatus
變量不顯示在單元格中,顯示不同的信息(例如文本值)。換句話說,syncStatus
並不是故障。
在表中,通過NSFetchedResultsController
,我顯示了唯一沒有同步的元素(布爾值設置爲NO
)。
- (NSFetchedResultsController*)fetchedResultsController
{
if(_fetchedResultsController)
return _fetchedResultsController;
NSManagedObjectContext* mainContext = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"LocalEntity" inManagedObjectContext:mainContext]];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"syncStatus == %@", [NSNumber numberWithBool:NO]]];
[fetchRequest setFetchBatchSize:10];
// sort descriptor here...
_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:mainContext sectionNameKeyPath:nil cacheName:nil];
_fetchedResultsController.delegate = self;
return _fetchedResultsController;
}
用戶可以選擇他/她想要同步的元素和後臺線程發送所選元素的服務,併爲那些,它也改變了syncStatus
變量YES
。
當操作完成,因爲我設置NSFecthedResultsControllerDelegate
,我註冊NSManagedObjectContextDidSaveNotification
(我也是在主線程通過通知的變化。我能看到該通知包含與正確的變更對象合併),我預計表格會更新(syncStatus
設置爲YES
的對象將不會顯示)。
說了這個,問題如下。
基於文檔,因爲我用的是內存只跟蹤選項,並缺少的更新是由於isSyncStatus
沒有裝上內存,但它仍然是一個錯誤?
你能向正確的方向建議我嗎?
預先感謝您。
P.S.
NSFetchedResultsControllerDelegate
方法正確實施。只有在主線程中才能做到這一點。
是的,當然。我忘了寫在我的問題。謝謝。 –