gpt4 book ai didi

ios - 需要有关核心数据的帮助

转载 作者:行者123 更新时间:2023-12-01 18:23:19 25 4
gpt4 key购买 nike

我是核心数据的新手,正在尝试使用核心数据创建简单的应用程序。我目前正在开发应用程序,以将数据保存为多对多关系,存在一些问题和教程,但我仍然感到困惑。

我有两个实体 person contactNumbers ,我正在从通讯录中获取person及其联系人号码,person 一个具有手机号码,iphone号码,家庭,工作地点等……这会创建多对多关系。

在我的代码中,我没有子类化任何实体,是否有必要子类化实体以保存关系数据?我之所以这样问是因为我已经读到,不必直接使用NSManagedObject类来继承子类就可以完成这项工作。

我想要保存的是个人一个的名字,姓氏在中的人实体以及它的联系电话在 contactNumbers实体中。如何使用核心数据将数据保存为多对多关系?

请我不要引用其他stackoverflow问题,raywenderlich教程,应用程序代码博客教程等。

请提供一个清晰易懂的代码,并提供一些概念来处理这种情况。非常感谢。

这是我的模特

如果我这样做

NSManagedObject *person = [NSEntityDescription insertNewObjectForEntityForName:@"person" inManagedObjectContext:self.managedObjectContext];

[person setValue:@"first name A" forKey:@"firstName"];
[person setValue:@"last name B" forKey:@"lastName"];
[person setValue:@"123" forKey:@"mobile"];

我收到这个错误
Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<NSManagedObject 0x82abcc0> setValue:forUndefinedKey:]: the entity Person is not key value coding-compliant for the key "mobile".

如果我这样做
NSManagedObject *person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:self.managedObjectContext];
[person setValue:@"first name A" forKey:@"firstName"];
[person setValue:@"last name B" forKey:@"lastName"];

NSManagedObject *contactNumber = [NSEntityDescription insertNewObjectForEntityForName:@"ContactNumber" inManagedObjectContext:self.managedObjectContext];
[contactNumber setValue:@"123" forKey:@"home"];
[contactNumber setValue:@"456" forKey:@"iPhone"];
[contactNumber setValue:@"789" forKey:@"mobile"];
[contactNumber setValue:@"111" forKey:@"work"];
[contactNumber setValue:@"112" forKey:@"other"];

它的工作正常,但是如何使数据在两个实体中相互关联?

最佳答案

您不需要继承。

您只需要关系。

在名为PersoncontactNumbers上建立指向ContactNumber实体的关系,并在名为ContactNumberperson实体上建立指向个人的匹配关系。
contactNumber关系应该是一对多的(因为一个人有很多联系人),而从ContactNumber回到Person的关系应该是一对一的(因为每个联系人条目只会在一个人中出现)。

然后,当您获得Person实体时,您将能够从contactNumbers属性中获取一组ContactNumber对象,然后浏览该集中的元素。或者,您可以搜索ContactNumber ID与追溯到person的人员关系匹配的Person实体。

跟进:您的第一个代码不起作用,因为您无法通过集合引用单个实例。

您的第二部分代码很好,只需添加以下行

contactNumber.person = person;

然后,您可以随时通过以下方式访问某人的联系人集:
NSSet *contacts = person.contactNumbers;

并获取您想要的联系电话。没有一些非常棘手的关键路径,您就不能直接从一个人转到一个联系人。

在建立模型之后,我强烈建议使用 Mogenerator生成数据对象,这样可以使数据使用方式更清晰。将setKey机制与Core Data一起使用绝对是疯狂的。

关于ios - 需要有关核心数据的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15722992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com