ios - NSFetchRequest - 包括未决更改

标签 ios core-data nsfetchrequest nsfetchedresultscontroller

我的 NSFetchedResultsController 有问题,似乎可以通过打开 IncludesPendingChanges 来解决,这让我很担心。 (我发现这不是真的,包括未决更改也无济于事。)

我的 Fetched Results Controller 在完整的 API 刷新时正确地获取并显示了我的对象。一步一步,我已经确认这个完整的 API 刷新的临时上下文被保存和合并而没有错误。

但是,如果我随后返回到一个 View ,该 View 从不同的导航流执行相同的获取请求,则只会返回和显示一个部分完整的对象,而不是完整的对象集。如果我此时进行完整的 API 刷新,刷新会显示正确的对象。

我相信我的问题可能是 mergeChangesFromContextDidSaveNotification 没有传播到主上下文,但从我的日志和单步执行来看,在我看来它正在正确保存。我不确定从这里去哪里。虽然 IncludesPendingChanges 解决了症状,但我认为它并没有解决根本问题。

作为一些补充信息,我将这个框架用于我的核心数据管理:https://github.com/vokalinteractive/CoreDataManager-iOS

我在 VIFetchedResultsController.m 的第 156 行添加了 includesPendingChanges

 [fetchRequest setIncludesPendingChanges:YES]

编辑 无论侥幸使我相信 includesPendingChanges 为 YES 已解决,问题已不再存在。原来这个项目有一些非常复杂的内存管理,在花了一整天的时间清理它之后,我仍然离完成这项工作还差得很远。但仍然在同一点,看起来更改没有传播到主数据存储,或者没有坚持。

作为提示,就像我在下面的评论中提到的,即使我指定了“includePendingChanges:YES”,也会使用以下方式注销我获取的对象:

[self.fetchedResultsController.fetchedObjects description]

以“includesPendingChanges: NO”结尾。知道是什么原因造成的吗?

最佳答案

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

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

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

请参阅 documentation 中的两个短段落这一点解释得很好。

关于ios - NSFetchRequest - 包括未决更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14324685/

相关文章:

ios - 使用 NSFetchedResultsController 更新部分

ios - Coredata fetchrequest 谓词未显示正确的内容

ios - 如何在我的标签上显示两个日期的时间偏移量(年、月、周...)?

ios - isRegisteredForRemoteNotifications 返回 true 即使我完全禁用它

iOS URLForUbiquityContainerIdentifier 在某些设备上返回 nil

带有更多照片的 iOS Swift 应用程序 : Performance and Storage suggestions

ios - CoreStore 重新获取谓词 NSFetchRequest 问题

c# - 在 MonoTouch 中有一个 NSFetchRequest 和一个 NSPredicate 支持

ios - NSDictionaryM setObject :forKey: EXC_BAD_ACCESS crash

ios - 从 View Controller 到 View Controller 的通用函数传输