在Core Data中创建新的多对多关系的正确方法是什么?

时间:2010-10-14 19:48:24

标签: iphone objective-c cocoa-touch core-data

我有一个名为“Client”的实体,每个客户端都可以有多个“属性”。 CoreData为我创建方法,为我添加一个新的属性,但我不明白这个的目的。之间是否存在任何差异:

Property *newProperty = [NSEntityDescription insertNewObjectForEntityForName:@"Property" inManagedObjectContext:self.managedObjectContext];
newProperty.name = @"[New Property]";
newProperty.client = self.currentClient;

和此:

Property *newProperty = [NSEntityDescription insertNewObjectForEntityForName:@"Property" inManagedObjectContext:self.managedObjectContext];
newProperty.name = @"[New Property]";
[self.currentClient addPropertiesObject:newProperty];

据我所知,这两者完全相同;他们只是将我的新物业与正确的客户联系起来。是一个优先于另一个;有什么不同吗?我只是想确保我没有错过自动生成的“addPropertiesObject”方法的全部内容。谢谢,

1 个答案:

答案 0 :(得分:2)

假设关系是双向的(即,从两侧定义反比关系),那么您呈现的示例之间没有功能差异。使用代码中最有意义的。如果您专注于Property,请使用-[Property setClient:]。同样,如果您的代码集中在-[Client addPropertiesObject:]上,请使用Client

为完整起见,您还可以使用

Client *client = ...
Property *property = ...
[[client mutableSetValueForKey:@"properties"] addObject:property];

利用可变代理来实现密钥值编码中使用的多对多关系。最后一个选项可能应该避免使用上面的显式方法,因为Core Data可能会优化这些方法(实现细节;我不知道是否是这种情况)。