NSFetchedResultsController是否观察到永久存储的所有更改?
我的程序工作如下链接:
更新NSFetchedResultsController的结果而不需要新的提取
- 将NSFetchedResultsController的结果显示给UITableView
- 从Web服务获取新的对象,并将其存储到核心数据(在相同的视图控制器,与RestKit)
- 更新表视图与NSFetchedResultsController委托的通知
NSFetchedResultsControllerDelegate的实现是从Apple的Core Data项目复制的,我的预测是:
[NSPredicate predicateWithFormat:@"isMyTest == TRUE"]
如果属性更新从TRUE变为FALSE,则它将从tableview中删除行(因为该行的对象位于fetchedObjects
中)
但是,如果属性更新从FALSE变为TRUE,则NSFetchedResultsController不通知任何内容,因此新的数据不能在表视图中看到。 如果我手动更新NSFetchedResulsController和UITableView,它会显示新的数据。
我以为NSFetchedResultController监视持久存储中的所有更改,这是太大的希望? :d
(我真的想这样做,因为其他视图控制器可以更新持久性存储,那么很难更新视图控制器。)
如果是这样,你可以让我知道我怎么能更好地更新NSFetchedResultsController?
(更新)
在参考NSfetchedResultsController,我读了下面的单词:
因此,控制器有效地具有三种操作模式,由是否具有委托以及是否设置了高速caching文件名来确定。
没有跟踪:代表被设置为零。 控制器只是提供对数据的访问,就像执行提取时一样。
仅内存跟踪:代理非零,文件caching名称设置为零。 控制器监视其结果集中的对象,并更新部分和响应相关更改的sorting信息。
完全持久跟踪:委托和文件caching名称不为零。 控制器监视其结果集中的对象,并更新部分和响应相关更改的sorting信息。 控制器维护其计算结果的持久caching。
“完全持续跟踪”并不意味着我想要什么? 我设置了cacheName,但是它的工作原理是一样的。
我以为NSFetchedResultController监视持久存储中的所有更改,这是太大的希望?
FRC只会自动观察其提取返回的对象。 这通常不是一个问题,因为对由FRC监视的对象所做的更改应该来自tableview UI或背景上下文。 在前者中,FRC被警告改变,在后者中,合并前景和背景上下文将触发FRC更新。
这听起来像你有代码改变的价值,但你没有通知FRC你做了任何改变。 (如果你有一个tableview显示所有isMyTest == TRUE
对象,那么显然你不能从UI的isMyTest == FALSE
访问对象。)在这种情况下,你需要注册tableview控制器来:
NSManagedObjectContextObjectsDidChangeNotification
…来自上下文的通知,以便您可以告诉FRC更新其观察之外所做的更改。
我很抱歉我的错误,我testing了新的testing项目。
CoreData可以全程跟踪整个持久存储。
这意味着,如果新的对象适合谓词的NSFetchedResultsController,委托会通知它。