iphone - 我在哪里可以找到 Core Data 对多关系的一个很好的例子?

标签 iphone objective-c xcode core-data

有没有人有教程或源代码显示正在使用的一对多关系,用户可以在其中动态添加元素?我只是想看看,因为阅读它并没有多大帮助。

最佳答案

人们常常对一对多关系感到困惑,因为一个实体将关系表示为一组,而另一个将其表示为单个对象。采取以下实体:

EntityA{
    name:string
    bees<-->>EntityB.a
}

EntityB{
    name:string
    a<<-->EntityA.bees
}

在 EntityA 中,关系 bees 是一个集合,因为关系中可能有很多 EntityB 对象。因此,使用键值编码,您必须使用 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?

您不创建与属性的关系,在本例中为 name,而是与对象建立关系,在本例中为 Person 实体/类的实例。每个单独的 Person 对象都与所有其他 Person 对象完全分开,即使它们在它们的 name 属性中具有相同的值。

您必须获得对任何特定 Parent 对象的引用。如果您刚刚插入了一个新的 Parent 对象,那么您已经有了对它的引用。如果它已经被插入/持久化,那么您将创建一个带谓词的提取,该谓词将返回正确的对象。获得正确的 Parent 对象后,您只需将 Time 对象添加到关系中即可。

因此,如果您的实体看起来像这个伪代码:

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 - 我在哪里可以找到 Core Data 对多关系的一个很好的例子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5399195/

相关文章:

ios - 如何在 Storyboard上为 xcode 中的所有设备定位按钮

objective-c - 如何打印 Restkit 发送的正文(IOS)

ios - 在 objective-c 中启用断言

ios - 将 Facebook SDK 集成到我的 iOS 框架中

ios - 无法将 GeoJSON 文件上传到 iTunes Connect

ios - 如何在 ios 的数字键盘键盘中为所有文本字段添加下一个按钮并导航到下一个

iphone - 饼图标签在图像上不可见

iphone - 左右扫视 View

ios - 取消选择 RowAtIndexPath 问题

c++ - 链接器错误 : missing vtable