Pointers 核心数据管理对象集

Pointers 核心数据管理对象集,pointers,core-data,Pointers,Core Data,在寻找指针和核心数据方面的帮助时,我将尝试用一个简单的示例进行解释 假设我有一个名为MOAdult的核心数据管理对象,它有一个名为“name”的字符串属性和一个名为“age”的NSDecimal数字属性 我有另一个名为MOChild的托管对象,它也有一个字符串属性'name',和一个名为'age'的NSDecimal Number属性 (我知道我通常会在这里创建子类,但我不支持这个演示) 我在MOAdult和MOChild之间有一对多的关系,这创造了一个我称之为“孩子”的集合。护城河本身也有一对

在寻找指针和核心数据方面的帮助时,我将尝试用一个简单的示例进行解释

假设我有一个名为MOAdult的核心数据管理对象,它有一个名为“name”的字符串属性和一个名为“age”的NSDecimal数字属性

我有另一个名为MOChild的托管对象,它也有一个字符串属性'name',和一个名为'age'的NSDecimal Number属性

(我知道我通常会在这里创建子类,但我不支持这个演示)

我在MOAdult和MOChild之间有一对多的关系,这创造了一个我称之为“孩子”的集合。护城河本身也有一对一的关系,我称之为“结婚”

所以

现在,当我将child添加到父对象时,我希望我的应用程序通过查看该关系(father.marriedTo)来识别成年人是否已婚,如果该关系不为null,则将同一个child对象添加到mother objects Children集

因此,实际上,父亲和母亲MOAdult对象在其子对象集中都具有相同的MOChild对象,并且对子对象的任何更改都会反映在母亲和父亲集合中

我假设这最好通过MOAdult对象内的集合上的KVO来完成,或者通过addChildObject方法来完成

仍在掌握核心数据,因此任何建议都值得赞赏。

这里有一个选项

创建一个
ParentsMO
对象,该对象具有名为
丈夫的1-1关系和名为
妻子的1-1关系,以及与
子女的1-多关系

然后,只需将子对象设置为父对象

做同样的事情,少捣乱


我知道您有一个精心设计的示例,但是如果您要尝试使用KVO来实现这一点,那么无论如何您都必须创建一个NSManagedObject子类。

您的设置是矛盾的。你说

莫阿杜尔特和莫奇尔德之间有一对多的关系

这使得我们不可能

将同一子对象添加到“母对象”子对象集中

后一种指令显然是不可能的,因为它是一对一的关系

您需要为孩子创建两个关系属性,例如
母亲
父亲
。您可以通过覆盖子托管对象子类中的相应setter来实现自动化

-(void)setFather:(Adult *)father {
   self.father = father;
   if (father.marriedTo != nil) {
      self.mother = father.marriedTo;
   }
}
对母亲也这样做,您还可以覆盖成人添加另一个孩子的方法


我想即使是马丁·R也会同意离婚最终不会改变父亲/母亲-孩子的关系。更重要的是,你必须问自己,如果与
结婚真的是决定另一方父母的最佳标准……

如果父母离婚,谁能得到孩子?:-)哈哈,说得好。我只是想用一种简单的方式来解释;)“…即使是马丁R也会同意…”-我说错了什么吗?一点也不-只是承认你幽默的评论。有趣的是,父子关系实际上是一种“关系”…我喜欢这种关系,但它需要是一种多对多的关系,这样我就可以模拟我所有的婚姻和每段婚姻中的孩子。哦,然后在婚姻对象上添加一个状态属性,您可以将其设置为“当前”或“已离婚”。我的意思是,如果这只是一个1-1,那么我可以很容易地忘记过去!这就是为什么模型与您正在工作的实际问题域相关联。
-(void)setFather:(Adult *)father {
   self.father = father;
   if (father.marriedTo != nil) {
      self.mother = father.marriedTo;
   }
}