我遇到了NSFetchedResultsController和CoreData的一些唠叨问题,其中任何一个我都非常感谢您获得帮助。使用NSFetchedResultsController处理背景变化
问题1 - 更新:我在后台线程上更新我的商店,导致某些行被删除,插入或更新。使用“mergeChangesFromContextDidSaveNotification:”方法将更改合并到主线程的上下文中。虽然我已经确认更新通过contextDidSaveNotifcation来完成,与插入和删除完全相同,但插入和删除操作已正确更新,但更新没有更新(例如,单元格标签未更新)。我当前的解决方法是暂时将上下文的陈旧间隔更改为0,但这看起来不是理想的解决方案。
问题2 - 删除对象:我的获取批量大小为20.如果一个对象被前20行中的后台线程删除,则一切正常。但是,如果对象位于前20行之后并且表格向下滚动,则会引发“CoreData无法完成错误”错误。我试图重新保留上下文并重新执行frc取回 - 一切都无济于事。注意:在这种情况下,不会为删除调用frc委托方法“didChangeObject ....” - 我认为这是因为当时有问题的对象没有发生故障(因为它在初始提取范围之外)。但由于某种原因,上下文仍然认为该对象在附近,尽管已从商店中删除。
问题3 - 删除部分:当行的删除导致删除部分时,我得到了“部分???中的无效行数”错误。我已经通过从NSFetchedResultsChangeMove:部分删除“reloadSection”行并用“[tableView insertRowsAtIndexPaths ....”替换它似乎工作,但我再次,我不知道这是否是最佳的解决方案。
任何帮助将不胜感激。谢谢!
非常感谢。事实上,缓存一直是我很多困境的原因。我现在只剩下1个问题 - 当我从后台上下文同步删除后保存上下文时,尽管合并策略是NSRollbackMergePolicy,但调用了frc NSFetchedResultsChangeInsert并删除了联系人重新插入。 – RunLoop 2010-06-07 15:57:56
没有将过期间隔设置为0可以解决上述评论中描述的问题,但这又会导致更新更改,例如单元格标签名称更改,未反映。 – RunLoop 2010-06-07 16:04:31
最后一个问题在某种程度上与我为后台moc使用单独的持久存储协调器有关。使用主要的psc结合不使用缓存解决了所有问题。 – RunLoop 2010-06-07 17:17:06