我想知道我自己是否做得太多了,并且可能更多地依赖CoreData。假设我有两个托管对象,狗和尾巴,它们有一对一的关系。狗有一种关系,尾巴,这是可选的。它的反面是owningDog。从狗到尾的删除规则是级联的。尾巴的owningDog关系也是可选的。其删除规则为无效。
尾巴和owningDog都是由CoreData生成的保留属性。
为了完成以下任务,我需要做些什么?
我一直在做这样的事情,写得很清楚
-(void)graftThenKill
{
Tail* tempTail = A.tail;
A.tail = nil; // releases X, sets relationship to nil so we can delete without cascading
B.tail = tempTail; // retains X, sets Tail's owningDog to B
[moc deleteObject:A]; // now we have his tail, don't need A
}我可以把这个换成
-(void)graft
{
A.tail.owningDog = B; // Makes A's tail nil, safe to delete A without deleting X?
[moc deleteObject:A];
}发布于 2009-11-18 17:32:26
是的,-graft就足够了。核心数据在生活中的真正目的是根据托管对象模型提供的描述来维护对象实例集合的对象图。如果您将关系声明为一对一,则分配(在本例中) A.tail.owningDog=B将重置一对一关系,如果有必要,会破坏以前的关系。这就是在Core数据模型中使用反向关系的原因,即使您不认为需要在两个方向上遍历关系。逆关系允许Core数据通过以我前面描述的方式管理整个关系来帮助您。
https://stackoverflow.com/questions/1756217
复制相似问题