2013-01-07 79 views
0

我從一邊NSManagedObject event,與Entity Contacts有一對多的關係。一旦下載了所有的聯繫人,我的應用程序從服務器下載聯繫人,我想將它們保存在CoreData保持關係。我想知道我是否可以一口氣拯救他們。所有在一個NSArray,contactsWeb接觸,並推動他們進入核心數據或我要救這樣他們每個人:如何在一對多關係中插入幾個NSManageObjects?

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

回答

0

保存管理對象上下文意味着所有變化的背景下,保存到持久存儲(或嵌套上下文情況下的父上下文)。因此,在插入所有聯繫人並設置關係後,您可以(也應該)「一次性」保存上下文。

注:如果要創建管理對象子類的實體ContactsEvent,你的代碼可以簡化爲

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

可以在Xcode中創建的管理對象子類:在Core選擇實體數據模型編輯器,並從菜單中選擇「編輯 - >創建NSManagedObject子類......」。

+0

好的,謝謝,但我想要做的是一次性保存所有新聯繫人。你發佈的是同樣的事情,我正在做,但與子類。 – subharb

+0

@DavidShaikh:我不明白你的評論。我在答覆的第一段中說過,保存上下文始終可以保存所有內容。 - 以下評論只是一個建議,如何簡化您的代碼,但完全獨立於您的「保存」問題。 –

+0

@DavidShaikh:我確實希望我的最後評論聽起來不失禮。如果您需要更多信息,請告訴我。 –