NSFetchedResultsController是否观察到永久存储的所有更改?

我的程序工作如下链接:

更新NSFetchedResultsController的结果而不需要新的提取

  1. 将NSFetchedResultsController的结果显示给UITableView
  2. 从Web服务获取新的对象,并将其存储到核心数据(在相同的视图控制器,与RestKit)
  3. 更新表视图与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,委托会通知它。