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

moo*_*nce 7 core-data nsnotifications nsfetchedresultscontroller nsmanagedobjectcontext ios

我的程序确实像以下链接一样工作:

更新NSFetchedResultsController的结果而不进行新的提取

  1. 将NSFetchedResultsController的结果显示给UITableView
  2. 从Web服务获取新对象并将其存储到核心数据(在相同的视图控制器中,使用RestKit)
  3. 使用NSFetchedResultsController委托的通知更新表视图

从Apple的Core Data项目复制NSFetchedResultsControllerDelegate的实现,我的谓词是:

[NSPredicate predicateWithFormat:@"isMyTest == TRUE"]
Run Code Online (Sandbox Code Playgroud)

如果属性更新从TRUE变为FALSE,则会从tableview中删除行(因为该行的对象fetchedObjects位于NSFetchedResultsController中)

但是,如果属性更新从FALSE变为TRUE,则NSFetchedResultsController不会通知任何内容,因此在表视图中无法看到新数据.如果我手动更新BOTH NSFetchedResulsController和UITableView,它会显示新数据.

我以为NSFetchedResultController监视持久存储中的所有变化,是不是太大了希望?:d

(我真的想这样做,因为其他视图控制器可以更新持久存储,然后很难更新视图控制器.)

如果是这样,你能让我知道如何以优美的方式更新NSFetchedResultsController?

(更新)

在NSfetchedResultsController的引用中,我读了下面的单词:

因此,控制器有效地具有三种操作模式,由它是否具有委托以及是否设置了缓存文件名来确定.

无跟踪:委托设置为nil.控制器只是提供对执行提取时的数据的访问.

仅内存跟踪:委托是非零的,文件缓存名称设置为nil.控制器监视其结果集中的对象并更新部分和订购信息以响应相关变化.

完全持久跟踪:委托和文件缓存名称是非零的.控制器监视其结果集中的对象并更新部分和订购信息以响应相关变化.控制器维护其计算结果的持久高速缓存.

"完全持久跟踪"并不意味着我想要什么?我设置了cacheName,但它的工作原理相同.

Tec*_*Zen 5

我以为NSFetchedResultController监视持久存储中的所有变化,是不是太大了希望?

FRC仅自动观察其获取返回的对象.这通常不是问题,因为FRC监视的对象的更改应该来自tableview UI或背景上下文.在前者中,FRC被警告该变化,并且在后者中,合并前景和背景上下文将触发FRC更新.

听起来你有代码更改值,但你没有通知FRC你做了任何改变.(如果你有一个显示所有对象的tableview,isMyTest == TRUE那么显然你无法从UI访问对象isMyTest == FALSE.)在这种情况下,你需要注册tableview控制器:

NSManagedObjectContextObjectsDidChangeNotification
Run Code Online (Sandbox Code Playgroud)

...来自上下文的通知,以便您可以告诉FRC更新其观察之外的更改.