我正在尝试了解Core Data(To-Many)关系。在以下代码中,我有两个实体
PeopleList< - >> TransactionDetails
NSManagedObjectContext *context = [self managedObjectContext];
NSManagedObject *personDetails = [NSEntityDescription
insertNewObjectForEntityForName:@"PeopleList"
inManagedObjectContext:context];
[personDetails setValue:[person fullName] forKey:@"name"];
NSManagedObject *transactionDetails = [NSEntityDescription
insertNewObjectForEntityForName:@"TransactionDetails"
inManagedObjectContext:context];
[transactionDetails setValue:[NSNumber numberWithFloat:oweAmount] forKey:@"amount"];
NSError *error;
if (![context save:&error]) {
NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
}
现在,此代码将新对象(行)插入模型。我感到困惑的是: 1.我是否必须在两个实体(PeopleList和TransactionDetails)中编写关联对象值的代码? 2.如果我一次又一次地运行此代码,它只是继续在第一个实体(PeopleList)中添加相同的对象。如何为To-Many关系写作?从最后几个小时的阅读中我得到的是我必须获取结果,搜索该特定对象,如果存在,则不要插入具有相同名称的新对象。但在这种情况下,它将如何与两个实体联系起来。
答案 0 :(得分:0)
就与多对多关系而言,您的模型实体是否在模型编辑器中正确连接?您是否为实体生成了类文件?如果您可以回答这两个问题,则可以像创建人员列表实体一样创建人员列表实体,也可以创建详细信息实体,但您需要将详细信息添加到个人列表中。查看方法名称的类文件。
答案 1 :(得分:0)
它不会,因为您没有在任何一个对象上设置关系。我没有看到你在哪里设置新创建的TransactionDetail对象的PeopleList属性(对不起,我不知道你是如何获得模型中命名的属性的,所以我只是使用类名)。因此,在创建transactionDetails对象之后,您需要执行类似transactionDetails.PeopleList = personDetails的操作,并且在该点设置两个关系; transactionDetails.PeopleList属性将指向您的personDetails对象,而personDetails.TransactionDetails集将包含transactionDetails。
您的人物对象是什么,您用来设置名称?
另外请注意,您可能要考虑将所有这些内容移动到NSManagedObject的子类中;为每个实体编写自己的超级简易构造函数/初始化程序等。很多人从来没有这样做过,并最终乱丢他们的控制器代码和大量的CoreData样板,这对我来说是一个谜,因为它是使得使用CoreData如此美好的原因。