寻找指针和核心数据的一些帮助,我将尝试用一个简单的例子来解释。
假设我有一个名为MOAdult的核心数据管理对象,它有一个名为'name'的String属性和一个名为'age'的NSDecimal Number属性。
我有另一个名为MOChild的托管对象,它还有1个String属性'name'和1个名为'age'的NSDecimal Number属性。
(我知道我通常会在这里继承,但我不是这个演示)
我在MOAdult和MOChild之间有一对多的关系,它会创建一个我称之为'孩子'的集合。 MOAdult与自己也有一对一的关系,我称之为'marriedTo'。
因此...
//I Create 2 adults
MOAdult *father = create object in core data.......
father.name = @"Bob";
father.age = 47; //obviously creating a NSDecimalNumber
MOAdult *mother = create object in core data.......
mother.name = @"Mary";
mother.age = 42; //obviously creating a NSDecimalNumber
//create the marriage relationship
father.marriedTo = mother;
//I create a child object
MOChild *child = create object in core data.......
child.name = @"Billy"
child.age = 7; //obviously creating a NSDecimalNumber
//add the child to the father
[father addChildObject:child];
现在,当我将child添加到父对象时,我希望我的应用程序通过查看该关系(father.marriedTo)来识别成人已婚,如果它不为null,则将相同的子对象添加到母对象中设置。
因此,父和母MOAdult对象在其子集中都具有相同的MOChild对象,对Child对象的任何更改都会反映在父集和父集中。
我假设最好通过MOAdult对象中的集合上的KVO或addChildObject方法中的这个来完成?
仍在掌握核心数据,因此任何建议都值得赞赏。
答案 0 :(得分:0)
这是一个选项
创建一个名为ParentsMO
的1-1关系的husband
对象和名为wife
的1-1关系以及与children
的1关系。
然后,您只需将子项设置为父对象。
同样的事情也不那么混乱。
我知道你有一个人为的例子,但是如果你试图用KVO做这个,那么无论如何你必须创建一个NSManagedObject子类。
答案 1 :(得分:0)
您的设置是矛盾的。你说
我在MOAdult和MOChild之间有一对多的关系
这使得无法
将相同的子对象添加到母对象Children Set
后一条指令显然是不可能的,因为它是一对一的关系。
您需要为孩子创建两个关系属性,例如mother
和father
。您可以通过覆盖子托管对象子类中的相应setter来自动执行该操作。
-(void)setFather:(Adult *)father {
self.father = father;
if (father.marriedTo != nil) {
self.mother = father.marriedTo;
}
}
对母亲也这样做,你也可以覆盖添加另一个孩子的成人方法。
我想甚至马丁R也会同意离婚最终不会改变父亲/母子关系。更重要的是,你必须问自己一个问题,marriedTo
是否真的是确定另一方父母的最佳标准......