我的 NSFetchedResultsController 有问题,这似乎可以通过打开 IncludesPendingChanges 来解决,这让我很担心。 (我发现这不是真的,包括挂起的更改也无济于事。)
发生的情况是我的 Fetched Results Controller 在完整的 API 刷新时正确获取并显示我的对象。逐步完成,我已经确认这个完整的 API 刷新的临时上下文被保存和合并,没有错误。
但是,如果我然后返回到从不同导航流执行相同提取请求的 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/