我假设我的设置是相当标准的,有一个刮擦板MOC(包含从网上下载的一堆对象),它从不保存,和另一个持久化MOC,它保留对象。当用户从scratchMOC中选择一个对象添加到她的库中时,我想要么1)从scratchMOC中删除该对象并插入permanentMOC中,要么2)将该对象复制到permanentMOC中。Core Data FAQ说我可以像这样复制一个对象:
NSManagedObjectID *objectID = [managedObject objectID];
NSManagedObject *copy = [context2 objectWithID:objectID];
在这种情况下,context2将是permanentMOC。但是,当我这样做时,复制的对象会出现错误;数据最初未解析。当它稍后得到解析时,所有值都为nil;没有从原始managedObject实际复制或引用任何数据(属性或关系)。因此,我看不出使用这个objectWithID:方法和只是使用insertNewObjectForEntityForName:将完全新的对象插入permanentMOC之间有任何区别。
我意识到我可以在permanentMOC中创建一个新对象,并手动复制旧对象的每个键值对,但我对这个解决方案不太满意。(我有许多不同的托管对象都有这个问题,因此我不想在继续开发时编写和更新所有这些对象的copy:方法。)有更好的方法吗?
NSDictionary *newValues = [oldObject dictionaryWithValuesForKeys:[[objectEntity attributesByName] allKeys]]
。该代码旨在获取旧对象的所有属性值,并将其存储在一个新的NSDictionary对象中。 - samvermette