如何在一对多关系中插入几个NSManageObjects?

时间:2013-01-07 16:30:22

标签: ios core-data

我从一侧NSManagedObject eventEntity Contacts有一对多的关系。我的应用程序从服务器下载联系人,一旦下载了所有联系人我想将它们保存在CoreData中保持这种关系。我想知道我是否可以一次性保存它们。 NSArray中的所有联系人contactsWeb,并将它们推送到核心数据中,或者我必须像这样保存每一个:

NSManagedObjectContext *context = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];

for(int i = 0; [contactsWeb count]; i++){

NSManagedObject *contact = [NSEntityDescription insertNewObjectForEntityForName:@"Contacts" inManagedObjectContext:context];

[contact setValue:[contactsWeb objectAtIndex:i] forKey:@"text"];
[contact setValue:[NSDate date] forKey:@"date"];

[[event mutableSetValueForKey:@"toContacts"]addObject:contact];
 NSError *error;
if(![context save:&error]){
    NSLog(@"%@", [error localizedDescription]);
}
}

1 个答案:

答案 0 :(得分:0)

保存托管对象上下文意味着上下文中的所有更改将保存到持久性存储(或者在嵌套上下文的情况下保存到父上下文)。所以你可以(并且应该)一次性保存上下文"插入所有联系人并设置关系后。

备注:如果为实体创建托管对象子类ContactsEvent,则可以将代码简化为

Contacts *contact = [NSEntityDescription insertNewObjectForEntityForName:@"Contacts" inManagedObjectContext:context];
contact.text = [contactsWeb objectAtIndex:i];
contact.date = [NSDate date];
[event addToContactsObject:contact];

可以在Xcode中创建托管对象子类:在Core Data模型编辑器中选择实体,然后选择"编辑器 - >创建NSManagedObject子类......"从菜单中。