0

我从一侧与 . 我的应用程序从服务器下载联系人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]);
}
}
4

1 回答 1

0

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

备注:如果您创建托管对象子类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 ...”。

于 2013-01-07T17:17:27.780 回答