核心数据 - 将数组存储到核心数据中 一对多关系表
Posted
技术标签:
【中文标题】核心数据 - 将数组存储到核心数据中 一对多关系表【英文标题】:core data - storing an array into core data one - tomany relationship table 【发布时间】:2013-02-04 16:43:08 【问题描述】:在我的联系人表中,我插入了从 iphone 通讯录中挑选的联系人的信息。
我存储联系人的姓名和号码(在第 0 个索引处)并通过此代码添加另外两个字段 twilio number 和 bool check。
AppDelegate *appDelegate =
[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context =
[appDelegate managedObjectContext];
Contacts * newContact = [NSEntityDescription
insertNewObjectForEntityForName:@"Contacts"
inManagedObjectContext:context];
newContact.name = name;
newContact.number = phone;
newContact.isEligible = isEligible;
newContact.twilionumber = tempTwilioNumber;
场景是选择所有其他电话号码(除了第 0 个索引),它们以数组的形式保存在具有电话号码属性的 ContactDetail 表中。 案例是一个联系人可以有多个其他号码。
如何将该数组插入到contactDetail 表中,以针对contacts 表中的一个条目?
【问题讨论】:
必须是数组吗?您可以使用另一个名为 Phonenumber 的实体,并在 Phonenumber 和 ContactDetail 之间创建一对多的关系。 【参考方案1】:您的 ContactDetail 关系应该是一对多,而不是一对一。您还需要向 ContactDetail 添加一个“索引”属性。这样,当您获取联系人实例的详细信息(详细信息将采用 NSSet 的形式)时,您可以按索引对其进行排序
【讨论】:
感谢您的回答。我已将关系设置为一对多。问题在于设置数据不获取数据。有什么方法可以从数组索引中按索引选择值并将其存储在核心数据表中?【参考方案2】:只需以下代码即可;
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];
Contacts * newContact = [NSEntityDescription
insertNewObjectForEntityForName:@"Contacts"
inManagedObjectContext:context];
newContact.name = name;
newContact.number = phone;
newContact.isEligible = isEligible;
newContact.twilionumber = tempTwilioNumber;
for (int i=1; i<otherContactNumbersArray.count; i++)
ContactDetail * newContactDetail = [NSEntityDescription
insertNewObjectForEntityForName:@"ContactDetail"
inManagedObjectContext:context];
newContactDetail.phoneNumber = (__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(phoneNumbers, i);
newContactDetail.contactInfo = newContact;
NSError *myError;
[context save:&myError];
非常感谢三打访客,他们甚至没有费心提高问题的评分,以便我早日找到解决方案.... :)
【讨论】:
以上是关于核心数据 - 将数组存储到核心数据中 一对多关系表的主要内容,如果未能解决你的问题,请参考以下文章