当我以编程方式更改某些现有的托管对象属性时,我的表视图没有更新,我有一个问题。我希望我的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