3

我的 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”结尾。知道什么会导致这种情况吗?

4

1 回答 1

6

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

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

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

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

于 2013-01-14T19:31:18.420 回答