繁体   English   中英

在核心数据中未获得多对多关系

[英]Not getting To-Many Relationship in Core Data

我想了解核心数据(一对多)的关系。 在以下代码中,我有两个实体

PeopleList <->>交易详细信息

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

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

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

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

另外,您可能需要考虑将所有此类内容移至NSManagedObject的子类中。 为每个实体编写自己的超级简单的构造函数/初始化程序等。 很多人从来没有这样做,最终以大量的CoreData样板乱扔了他们的控制器代码,这对我来说是个谜,因为这就是使CoreData如此出色的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM