【问题标题】:CoreData - how much is done to maintain relationships automaticallyCoreData - 为自动维护关系做了多少工作
【发布时间】:2009-11-19 01:32:26
【问题描述】:

我想知道是不是我自己做的太多了,可能更多地依赖 CoreData。假设我有两个托管对象,Dog 和 Tail,它们具有一对一的关系。狗有一个关系,尾巴,那是可选的。它的反义词是 owningDog。从 Dog 到 Tail 的删除规则是级联的。 Tail 的 owningDog 关系也是可选的。它的删除规则是无效的。

tail 和 owningDog 都是 CoreData 生成的保留属性。

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

  1. 将狗 A 的尾巴 X 移动到狗 B
  2. 删除狗 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];
}

【问题讨论】:

    标签: iphone core-data


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      相关资源
      最近更新 更多