核心数据管理对象集

时间:2013-11-28 20:26:22

标签: pointers core-data

寻找指针和核心数据的一些帮助,我将尝试用一个简单的例子来解释。

假设我有一个名为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方法中的这个来完成?

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

2 个答案:

答案 0 :(得分:0)

这是一个选项

创建一个名为ParentsMO的1-1关系的husband对象和名为wife的1-1关系以及与children的1关系。

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

同样的事情也不那么混乱。

我知道你有一个人为的例子,但是如果你试图用KVO做这个,那么无论如何你必须创建一个NSManagedObject子类。

答案 1 :(得分:0)

您的设置是矛盾的。你说

  

我在MOAdult和MOChild之间有一对多的关系

这使得无法

  

将相同的子对象添加到母对象Children Set

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

您需要为孩子创建两个关系属性,例如motherfather。您可以通过覆盖子托管对象子类中的相应setter来自动执行该操作。

-(void)setFather:(Adult *)father {
   self.father = father;
   if (father.marriedTo != nil) {
      self.mother = father.marriedTo;
   }
}

对母亲也这样做,你也可以覆盖添加另一个孩子的成人方法。

我想甚至马丁R也会同意离婚最终不会改变父亲/母子关系。更重要的是,你必须问自己一个问题,marriedTo是否真的是确定另一方父母的最佳标准......