【问题标题】:NSFetchRequest - Includes Pending ChangesNSFetchRequest - 包括待处理的更改
【发布时间】: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


【解决方案1】:

也许你弄错了。 includesPendingChanges 的默认值为YES,因为这是您通常想要的行为。您的 UI 更新损坏是意料之中的事。

将此属性设置为NO 实际上只是为了方便使用NSDictionaryResultType 进行提取,尤其是在包含可以在数据库级别处理的简单聚合时。

我怀疑这绝不是您的错误,而是您使用的框架可能存在缺陷。无论如何,您认为的问题实际上只是预期的行为。

请参阅documentation 中的两个简短段落,其中对此进行了很好的解释。

【讨论】:

  • 嗯。我刚刚看了文档,你是对的。那就奇怪了。记录“[self.fetchedResultsController.fetchedObjects description]”以“includesPendingChanges: NO”结尾,除非我调用“[fetchRequest setIncludesPendingChanges:YES]”。好像它默认为 NO。
  • 我正在更新我的问题。我还是一头雾水。
  • 好的,看来你的框架确实有问题。您描述的问题实际上可能是任何东西,深深地隐藏在专有第三方框架的复杂性中。很典型的是,一旦发生这样的事情,它会增加复杂性,而不是降低复杂性。抛弃 CoreDatamanager-iOS 并使用原生 API。
  • 第三方框架只有3个类,几百行一个,我到处都用。我宁愿用框架解决问题,然后从头开始。该框架也适用于其他任何地方,我担心我继承该项目的程序员使用不当。不过还是谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-22
相关资源
最近更新 更多