1

我有一个 NSFetchedResultsController 绑定到我的主要托管对象上下文。它负责在我的主视图中保存表格视图的数据。

我有一个在后台线程上运行的 NSOperation,它刷新/删除获取的结果控制器正在跟踪的托管对象。我在 nsoperation 中创建了一个子上下文(私有并发类型 / 父级 = 主托管对象上下文)并插入/删除对象。完成后,它会保存其上下文以及父上下文。

有趣且令人沮丧的是,这在 iOS 6 中运行良好。当我插入或删除对象时,我获取的结果控制器会收到更改通知,并且一切都按预期工作。但是,在 iOS 5 上,除了删除之外,一切正常。获取的结果控制器不会收到删除通知。但是...如果我手动刷新获取的结果控制器(使其为零并重新获取相同的谓词),那么它将显示预期的结果。

此外,当我在主上下文中注册更改/保存通知时,我可以看到用户信息字典包含我已删除的对象......即使在 iOS 5 中!

我认为可能存在的一个问题,但我认为不成立,因为我已经删除了这些因素,即这个对象与另一个对象存在多对一关系。我正在删除/插入的对象是“员工”,它与“部门”有关系。员工设置为无效,部门设置为级联。

正如我所说,这在 iOS6 中运行良好,但在 iOS5 中则不行。

任何提示都会非常有帮助。

4

1 回答 1

1

此错误是由于保存到持久存储。这个子上下文会保存自己,然后在它的父级(主要托管对象上下文)上调用 perform 块。当主托管对象上下文保存时,它会触发后台上下文写入持久存储。当我删除后台上下文保存时,获取的结果控制器按预期更新。

我发现可能导致这种情况的一些有趣的事情是,每次我尝试保存到商店时,托管对象都会泄漏。还不完全确定如何解决这个问题,但很高兴知道它的原因。

于 2013-07-12T06:24:36.860 回答