我有一个NSFetchedResultsController绑定到我的主要托管对象上下文。它负责在我的主视图中保存表视图的数据。
我在后台线程上运行了一个NSOperation,它刷新/删除了获取的结果控制器正在跟踪的托管对象。我在nsoperation和insert / delete对象中创建了一个子上下文(私有并发类型/ parent =主管理对象上下文)。完成后,它会保存其上下文以及父上下文。
有趣且非常令人沮丧的是,这在iOS 6中运行良好。当我插入或删除对象时,我的获取结果控制器会收到更改通知,一切都按预期工作。但是,在iOS 5上,一切都有效,除了删除。获取的结果控制器不会被通知删除。但是......如果我手动刷新获取的结果控制器(使其为nil并重新获取相同的谓词),那么它将显示预期的结果。
此外,当我在主要上下文中注册更改/保存通知时,我可以看到用户信息词典包含我已删除的对象...即使在iOS 5中也是如此!
我认为可能是一个问题,但我认为因为我已经删除了这些因素,因此该对象与另一个对象存在多对一的关系。我正在删除/插入的对象是“雇员”,它与“部门”有关系。员工设置为无效,部门设置为级联。
正如我所说,这在iOS6中运行良好,但在iOS5中运行不正确。
任何提示都会非常有用。
答案 0 :(得分:1)
此错误是由于保存到持久性存储。这个子上下文保存自己,然后调用对它的父,即主要的托管对象上下文执行块。当主要托管对象上下文保存时,它会触发后台上下文以写入持久性存储。当我删除后台上下文保存时,获取的结果控制器按预期更新。
我发现可能导致这种情况的一些有趣的事情是每次我尝试保存到商店时托管对象都在泄漏。还不确定如何解决这个问题,但很高兴知道它的原因。