【发布时间】:2012-12-28 18:45:01
【问题描述】:
我的 NSFetchedResultsController 出现问题,似乎可以通过打开 IncludesPendingChanges 来解决,这让我很担心。 (我发现这不是真的,包括未决的更改也无济于事。)
发生的情况是我的 Fetched Results Controller 在完整的 API 刷新时正确地获取并显示我的对象。逐步进行,我已经确认这个完整的 API 刷新的临时上下文被保存和合并,没有错误。
但是,如果我随后返回到从不同导航流执行相同获取请求的视图,则仅返回和显示一个部分完整的对象,而不是完整的对象集。如果我此时执行完整的 API 刷新,刷新会显示正确的对象。
我相信我的问题可能是 mergeChangesFromContextDidSaveNotification 没有传播到主要上下文,但从我的日志和逐步执行来看,在我看来它正在正确保存。我不知道从这里去哪里。虽然 IncludesPendingChanges 解决了症状,但我认为它不能解决根本问题。
作为一些补充信息,我正在使用这个框架来管理我的核心数据:https://github.com/vokalinteractive/CoreDataManager-iOS
我通过在 VIFetchedResultsController.m 的第 156 行添加来打开 includesPendingChanges
[fetchRequest setIncludesPendingChanges:YES]
编辑无论什么侥幸让我相信 includePendingChanges 为 YES 已修复,问题不再存在。原来这个项目有一些非常麻烦的内存管理,在花了一整天清理之后,我仍然没有接近完成这项工作。不过,在同一点上,更改似乎没有传播到主数据存储,或者没有坚持下去。
作为一个提示,就像我在下面的评论中提到的那样,即使我指定“includePendingChanges:YES”,使用以下命令注销我获取的对象:
[self.fetchedResultsController.fetchedObjects description]
以“includesPendingChanges: NO”结尾。知道是什么原因造成的吗?
【问题讨论】:
-
您是否尝试过enabling core data debugging 来查看正在运行的查询以及正在保存/返回的数据?否则,我猜你是对的,它与保存或线程相关;也许您可以发布一些您在该区域周围使用的代码?
-
谢谢,我明天看看这个!
-
这帮助我解决了我的问题,谢谢!
标签: ios core-data nsfetchrequest nsfetchedresultscontroller