iphone – 在哪里可以找到一个核心数据对多关系的好例子?
有没有人有教程或源代码显示一个多对多关系正在使用,用户在哪里添加元素?我只想看看,因为阅读它没有太多的帮助.
解决方法
人们经常被许多关系困惑,因为一个实体将关系表示为一个集合,而另一个实体将其表示为单个对象.采取以下实体:
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; 还要记住,通过管理对象,将关系定义为相对的一边自动设置为对方,并以相同的方式删除工作. 更新
您不会在属性中创建关系,在本例中为名称,而是与对象(在本例中为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对象的角度来看,关系只是一个对象. 一旦您开始思考对象而不是数据库,这真的很简单.即使与同一实体/类的其他对象共享属性,在上下文中插入的每个对象都是唯一的.这就是为什么您可以设置特定对象之间的关系,而不必担心存储在其属性中的值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |