我正在使用一个使用谓词来获取某些托管对象的NSFetchedResultsController
。我总是假设当对象发生变化时NSFetchedResultsController
会更新,即如果我有谓词{{1}}且"box == 3"
更改为box
,则不会获取它
但是,即使我更改了对象并保存了托管对象上下文,我仍然可以通过FRC访问该对象。即使删除缓存,这仍然是可能的。
这是正确的行为吗?
答案 0 :(得分:2)
您是否为NSFetchedResultsController设置了委托?当托管对象上下文发生更改时,NSFetchedResultsController的委托是通知更改的委托。请参阅以下内容:
答案 1 :(得分:2)
一种简单的方法,例如更新你的表只是将FRC设置为nil
并重新加载。这往往会解决所有更新问题,也非常有效。 FRC将懒洋洋地重新创建并填充你的桌子。
self.fetchedResultsController = nil;
[self.tableView reloadData];
答案 2 :(得分:0)
经过一些进一步的测试后,我认为假设FRC
没有我做某事就不会更新。我只调用-performFetch:
一次,但我没有实现委托。根据文档,FRC
似乎只能注册更改通知:
如果为获取的结果控制器设置委托,则为控制器 注册以从其托管对象接收更改通知 上下文。