没有获得核心数据中的多对多关系

时间:2012-09-05 17:51:28

标签: ios xcode core-data

我正在尝试了解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关系写作?从最后几个小时的阅读中我得到的是我必须获取结果,搜索该特定对象,如果存在,则不要插入具有相同名称的新对象。但在这种情况下,它将如何与两个实体联系起来。

2 个答案:

答案 0 :(得分:0)

就与多对多关系而言,您的模型实体是否在模型编辑器中正确连接?您是否为实体生成了类文件?如果您可以回答这两个问题,则可以像创建人员列表实体一样创建人员列表实体,也可以创建详细信息实体,但您需要将详细信息添加到个人列表中。查看方法名称的类文件。

答案 1 :(得分:0)

它不会,因为您没有在任何一个对象上设置关系。我没有看到你在哪里设置新创建的TransactionDetail对象的PeopleList属性(对不起,我不知道你是如何获得模型中命名的属性的,所以我只是使用类名)。因此,在创建transactionDetails对象之后,您需要执行类似transactionDetails.PeopleList = personDetails的操作,并且在该点设置两个关系; transactionDetails.PeopleList属性将指向您的personDetails对象,而personDetails.TransactionDetails集将包含transactionDetails。

您的人物对象是什么,您用来设置名称?

另外请注意,您可能要考虑将所有这些内容移动到NSManagedObject的子类中;为每个实体编写自己的超级简易构造函数/初始化程序等。很多人从来没有这样做过,并最终乱丢他们的控制器代码和大量的CoreData样板,这对我来说是一个谜,因为它是使得使用CoreData如此美好的原因。