use*_*951 17 xcode core-data objective-c nsmanagedobjectcontext
如何更新子托管对象上下文,以便它与父级具有相同的数据?
据我所知,在储蓄时,孩子只走了一步,即父母.然而,当获取提取总是非常深入到父和持久存储.所以我希望事情会是一样的.
但事实并非如此.
我有一个托管对象上下文,它是所有其他托管对象上下文的父级.
一个孩子改变数据并保存.父母也改变了.我在父进程上执行executeFetchRequest,我看到数据发生了变化.
但是,父母的一些孩子仍然使用旧数据.相同的对象id相同的数据.不知何故,该物业的价值保持不变.
如何告诉孩子从父母那里重新加载新数据?
更确切地说
说P是父母
说它有C1 C2 C3作为孩子
然后C1更改数据并提交.更改将传播到P.但是,在C2和C3处执行executeFetchRequest仍会显示旧数据.
是什么赋予了?
例如,当我检查imageBlob属性时,这就是我得到的:
儿童:
2013-02-05 13:57:42.865 BadgerNew[78801:c07] imageBlob: <UIImage: 0x89c3c50>
2013-02-05 13:57:42.866 BadgerNew[78801:c07] imageBlob: <null>
2013-02-05 13:57:42.866 BadgerNew[78801:c07] imageBlob: <null>
2013-02-05 13:57:42.866 BadgerNew[78801:c07] imageBlob: <null>
Run Code Online (Sandbox Code Playgroud)
家长:
2013-02-05 13:57:42.868 BadgerNew[78801:c07] imageBlob: <UIImage: 0x114af650>
2013-02-05 13:57:42.868 BadgerNew[78801:c07] imageBlob: <UIImage: 0x8e492e0>
2013-02-05 13:57:42.868 BadgerNew[78801:c07] imageBlob: <UIImage: 0x114c79b0>
2013-02-05 13:57:42.869 BadgerNew[78801:c07] imageBlob: <UIImage: 0xa8c76e0>
Run Code Online (Sandbox Code Playgroud)
这是一个更全面的版本,为什么我记下moc,父moc,blob,URL和对象ID.儿童:
特别是我希望mainqueue managedobject上下文是父节点的另一个子节点,而不是所有其他managedObjectContext的父节点.另一方面,我还希望mainQueue Managed对象上下文具有uptodate信息.我想知道标准解决方案是什么.
Fru*_*eek 21
该子项具有无效的现有引用.如果您希望父级保存后兄弟姐妹同步,则必须使子级无效reset.
在调用之后reset,所有接收者的管理对象都被"遗忘".如果使用此方法,则应确保您也放弃对使用接收器获取的任何管理对象的引用,因为它们之后将无效.
refreshObject:mergeChanges:如果您希望更精细地控制子上下文中已更改的对象,则还可以在保存父上下文时对所有子上下文上更改的单个对象使用.