我正在使用以下MOC设置:
儿童会定期保存更改并在需要时重新生成主MOC的新快照。
一切正常,直到我尝试保存主要MOC。这是我收到的错误消息:Cannot update object that was never inserted
未解决的错误错误域= NSCocoaErrorDomain代码= 134030“操作无法完成。(Cocoa错误134030)。”UserInfo = 0x1758e200 {NSAffectedObjectsErrorKey =( “(entity:Event; id:0x1767d3d0; data:{\ n dateBegin = nil; \ n dateEnd = nil; \ n identifier = nil; \ n identifierBegin = 0; \ n isProcessed = 1; \ n nPhotos = 0; \ n name = nil; \ n photos = \“\”; \ n})“ ),NSUnderlyingException =无法更新从未插入的对象。},
它不会一直发生,并且消除耗时的操作会降低其发生频率。我还注意到,在异常期间,其他MOC正在忙于保存或查询。我使用performBlock
或performBlockAndWait
来使所有与MOC相关的操作在正确的队列上运行。
如果相关,child1
导入基础对象,child2
创建事件,child3
处理事件并更新Event
和基础对象。 parent
用于将tge数据持久保存到磁盘并更新UI。消除使用child3
的线程可以解决问题,但我不相信这不是时间问题。
为什么会发生这种情况?
修改
我想我找到了问题的根源。现在正在寻找解决方案。
child3
更新了Event
并尝试将更改保存到parent
,而child2
决定删除Event
并已保存此更改。保存是尝试更新不存在的对象。奇怪的是,只有在我尝试将parent
保存到PSC时才会出现错误。
答案 0 :(得分:0)
我对错误消息的看法是一样的,在我的情况下,问题在于存储对临时(不是永久性的,在保存上下文后生成)ObjectID的引用,试图从另一个上下文中获取对象(objectWithID: )使用id然后对此对象执行更改。保存方法给了我相同的结果。
您是否有机会通过引用ObjectID来访问上下文之间的对象?