首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CoreData -为自动维护关系做了多少工作

CoreData -为自动维护关系做了多少工作
EN

Stack Overflow用户
提问于 2009-11-18 14:03:00
回答 1查看 194关注 0票数 0

我想知道我自己是否做得太多了,并且可能更多地依赖CoreData。假设我有两个托管对象,狗和尾巴,它们有一对一的关系。狗有一种关系,尾巴,这是可选的。它的反面是owningDog。从狗到尾的删除规则是级联的。尾巴的owningDog关系也是可选的。其删除规则为无效。

尾巴和owningDog都是由CoreData生成的保留属性。

为了完成以下任务,我需要做些什么?

  1. 将狗A的尾巴X移至狗B
  2. 删除的狗A(不删除狗B的新尾巴X)。

我一直在做这样的事情,写得很清楚

代码语言:javascript
复制
-(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
}

我可以把这个换成

代码语言:javascript
复制
-(void)graft
{
A.tail.owningDog = B; // Makes A's tail nil, safe to delete A without deleting X?
[moc deleteObject:A];
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-11-18 17:32:26

是的,-graft就足够了。核心数据在生活中的真正目的是根据托管对象模型提供的描述来维护对象实例集合的对象图。如果您将关系声明为一对一,则分配(在本例中) A.tail.owningDog=B将重置一对一关系,如果有必要,会破坏以前的关系。这就是在Core数据模型中使用反向关系的原因,即使您不认为需要在两个方向上遍历关系。逆关系允许Core数据通过以我前面描述的方式管理整个关系来帮助您。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1756217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档