【发布时间】:2011-11-08 23:57:26
【问题描述】:
我的程序确实像下面的链接一样工作:
Update results of NSFetchedResultsController without a new fetch
- 将 NSFetchedResultsController 的结果显示到 UITableView
- 从 Web 服务获取新对象并将其存储到核心数据(在同一个视图控制器中,使用 RestKit)
- 使用 NSFetchedResultsController 委托通知更新表视图
NSFetchedResultsControllerDelegate 的实现是从 Apple 的 Core Data 项目中复制过来的,我的谓词是:
[NSPredicate predicateWithFormat:@"isMyTest == TRUE"]
如果属性更新从 TRUE 变为 FALSE,它将从 tableview 中删除行(因为该行的对象位于 NSFetchedResultsController 的 fetchedObjects 中)
但是,如果属性更新从 FALSE 变为 TRUE,则 NSFetchedResultsController 不会通知任何内容,因此无法在表视图中看到新数据。如果我手动更新 BOTH NSFetchedResulsController 和 UITableView,它会显示新数据。
我以为 NSFetchedResultController 会监视持久存储中的所有变化,是不是希望太大了? :D
(我真的很想这样做,因为其他视图控制器可以更新持久存储,那么很难更新视图控制器。)
如果是这样,您能告诉我如何以精美的方式更新 NSFetchedResultsController 吗?
(更新)
参考 NSfetchedResultsController,我读到以下文字:
因此,控制器有效地具有三种操作模式,确定 通过是否有委托,是否设置了缓存文件名。
无跟踪:委托设置为 nil。控制器简单 提供对执行 fetch 时数据的访问。
仅内存跟踪:委托非零且文件缓存名称 设置为零。控制器监视其结果集中的对象并 更新部分和订购信息以响应相关 变化。
完全持久跟踪:委托和文件缓存名称是 非零。控制器监视其结果集中的对象并更新 部分和订购信息以响应相关变化。这 控制器维护其结果的持久缓存 计算。
“完全持续跟踪”不是我想要的吗?我设置了cacheName,但它的工作原理相同。
【问题讨论】:
标签: ios core-data nsfetchedresultscontroller nsmanagedobjectcontext nsnotifications