當我以編程方式更改某些現有的託管對象屬性時,我的表視圖沒有更新,我有一個問題。我希望我的NSFetchedResultsControllerDelegate
在這種情況下被調用,但事實並非如此。核心數據:更新託管對象不會調用NSFetchedResultsControllerDelegate
蘋果醫生說:
的
NSFetchedResultsController
實例使用在這個協議的方法其委託控制器的擷取結果已被更改通知由於添加,刪除,移動,或更新操作。
更詳細地說,我的管理對象是一個int屬性,名爲status
,它取值爲enum
。我的表格視圖僅顯示status
等於upToDate
(其中一個枚舉值)的對象。要做到這一點,我FetchedResultController有該狀態測試謂詞:
predicate = [NSPredicate predicateWithFormat:@"doc.status == %d", upToDate];
它工作正常,但是當我改變了過期的對象回狀態upToDate
更新不會體現出來。我的代碼是從Apple的模板中修改的。
這裏是我的嘗試:
myObject.status = [NSNumber numberWithInt:upToDate];
[managedObjectContext save:nil];
[managedObjectContext processPendingChanges];
[myTableView reloadData];
最後,我設法把我的表視圖更新至呼叫:
[fetchedResultsController performFetch:&error];
[myTableView reloadData];
但即便如此,關我NSFetchedResultsControllerDelegate
get方法這與蘋果公司的文檔相矛盾。另外,沒有平滑的動畫發生。
我預計controllerWillChangeContent:
,controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:
和controllerDidChangeContent:
被調用。
我想我錯過了一些東西,可能是很明顯的東西,但我看不到。每次有一些託管對象可能發生更改時,是否需要調用performFetch:
? NSFetchedResultsControllerD
真的什麼時候調用它的委託?
謝謝。
您是否發現此行爲的任何解決方案?我面臨類似的情況,我的委託回調從未觸發更新操作。無論如何,添加新對象或刪除現有對象都會調用委託方法。可能是什麼原因? – 2012-11-18 19:46:52