NSFetchedResultsController何时更新?

时间:2011-10-09 11:20:25

标签: iphone objective-c core-data nsfetchedresultscontroller

我正在使用一个使用谓词来获取某些托管对象的NSFetchedResultsController。我总是假设当对象发生变化时NSFetchedResultsController会更新,即如果我有谓词{{​​1}}且"box == 3"更改为box,则不会获取它

但是,即使我更改了对象并保存了托管对象上下文,我仍然可以通过FRC访问该对象。即使删除缓存,这仍然是可能的。

这是正确的行为吗?

3 个答案:

答案 0 :(得分:2)

您是否为NSFetchedResultsController设置了委托?当托管对象上下文发生更改时,NSFetchedResultsController的委托是通知更改的委托。请参阅以下内容:

http://developer.apple.com/library/ios/#DOCUMENTATION/CoreData/Reference/NSFetchedResultsControllerDelegate_Protocol/Reference/Reference.html

答案 1 :(得分:2)

一种简单的方法,例如更新你的表只是将FRC设置为nil并重新加载。这往往会解决所有更新问题,也非常有效。 FRC将懒洋洋地重新创建并填充你的桌子。

self.fetchedResultsController = nil;
[self.tableView reloadData];

答案 2 :(得分:0)

经过一些进一步的测试后,我认为假设FRC没有我做某事就不会更新。我只调用-performFetch:一次,但我没有实现委托。根据文档,FRC 似乎只能注册更改通知:

  

如果为获取的结果控制器设置委托,则为控制器   注册以从其托管对象接收更改通知   上下文。