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



我有从一方的NSManagedObject event,有一个关系与Entity Contacts多。我的应用程序从服务器下载联系人,一旦所有的联系人下载,我想保存在CoreData保持关系。我想知道我能不能一次救他们。NSArray, contactsWeb中的所有联系人,并将它们推入Core Data或者我必须像这样保存它们中的每一个:

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]);
}
}

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

备注:如果你为你的实体创建了管理对象子类ContactsEvent,你的代码可以简化为

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

管理对象子类可以在Xcode中创建:选择Core Data模型编辑器中的实体,从菜单中选择"editor -> Create NSManagedObject subclass…"

最新更新