【发布时间】:2009-11-19 01:32:26
【问题描述】:
我想知道是不是我自己做的太多了,可能更多地依赖 CoreData。假设我有两个托管对象,Dog 和 Tail,它们具有一对一的关系。狗有一个关系,尾巴,那是可选的。它的反义词是 owningDog。从 Dog 到 Tail 的删除规则是级联的。 Tail 的 owningDog 关系也是可选的。它的删除规则是无效的。
tail 和 owningDog 都是 CoreData 生成的保留属性。
为了完成以下任务,我需要做些什么?
- 将狗 A 的尾巴 X 移动到狗 B
- 删除狗 A(不删除狗 B 的新尾巴 X)。
我一直在做这样的事情,为了清楚起见,写完整
-(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];
}
【问题讨论】: