EntityA{ name:string bees<-->>EntityB.a}EntityB{ name:string a<<-->EntityA.bees}
在EntityA中,关系蜜蜂是一组,因为关系中可能有很多EntityB对象.所以,使用Key-Value编码,你将不得不使用mutableSetForKey来访问关系:扩展所有内容以查看详细信息:
NSMutableSet *muteSet=[anEntityAObj mutableSetValueForKey:@"bees"];[muteSet addobject:aNewBObj];[anEntityAObj setValueForKey:@"bees"];
…或更紧凑:
[[anEntityAObj mutableSetValueForKey:@"bees"] addobject:aNewBObj];
但是,如果您从EntityB方面设置,则只需添加单个对象即可直接使用setValueForKey:
[anEntityBObj setValueForKey:anEntityAObj];
那就是使用通用的NSManagedobject实例来表示你的实体.如果您创建自定义子类,那么您有属性和方法来为您设置:
[anEntityAObj addBeesObject:anEntityBObj];anEntityBObj.a=anEntityAObj;
还要记住,通过管理对象,将关系定义为相对的一边自动设置为对方,并以相同的方式删除工作.
更新
Lets say i’ve got 2 entitIEs —
Person:with “name” attribute —
Times:with “time” attribute — i would
want to set multiple times for each
name,but how to I tell it which name
i would like to add the specific times
to?
您不会在属性中创建关系,在本例中为名称,而是与对象(在本例中为Person实体/类的实例).每个Person对象与其他所有Person对象完全分离,即使它们的name属性中的值相同.
您必须获得对任何特定Parent对象的引用.如果您刚刚插入了一个新的父对象,那么您已经有了它的引用.如果已经插入/持久化,那么您将创建一个带有谓词的fetch,该谓词将返回正确的对象.一旦你拥有正确的父对象,你只需要添加时间对象的关系.
所以,如果你的实体看起来像这样的伪代码:
Parent{ name:string times<-->>Time.parent}Time{ theTime:date parent<<-->Parent.times}
…并且您正在使用通用的NSManagedobjects来设置您的实体,您可以设置现有的Parent对象和新的Time对象之间的关系,如下所示:
NSManagedobject *existingParent= //... results of a fetch NSManagedobject *newTime=[NSEntityDescription insertNewObjectForEntityForname:@"Time" inManagedobjectContext:self.moc]; [newTime setValue:[NSDate date] forKey:@"theTime"]; [newTime setValue:existingParent forKey:@"parent"];
请注意,如果从Time对象设置关系,则可以使用setValue:ForKey:因为从Time对象的角度来看,关系只是一个对象.
一旦您开始思考对象而不是数据库,这真的很简单.即使与同一实体/类的其他对象共享属性,在上下文中插入的每个对象都是唯一的.这就是为什么您可以设置特定对象之间的关系,而不必担心存储在其属性中的值.
总结以上是内存溢出为你收集整理的iphone – 在哪里可以找到一个核心数据对多关系的好例子?全部内容,希望文章能够帮你解决iphone – 在哪里可以找到一个核心数据对多关系的好例子?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)