2011-03-07 60 views
1

我有一種情況,我想用一些條目預先填充CoreData DB。由於這是在運行時完成的,因此我需要在代碼中執行此操作。使用CoreData插入多個對象

我有這個代碼,其中只插入第二個問題....

Event *event = (Event *)[NSEntityDescription insertNewObjectForEntityForName:@"Event" inManagedObjectContext:managedObjectContext]; 
    [event setLat:[NSNumber numberWithDouble:52.25]]; 
    [event setLon:[NSNumber numberWithDouble:4.75]]; 
    [event setLatspan:[NSNumber numberWithDouble:0.7]]; 
    [event setLonspan:[NSNumber numberWithDouble:0.88]]; 
    [event setName:@"Test, 1"]; 
    // Commit the change. 
    NSError *error; 
    if (![managedObjectContext save:&error]) { 
      NSLog(@"%@",[error description]); 
    } 

    [event setLat:[NSNumber numberWithDouble:53.25]]; 
    [event setLon:[NSNumber numberWithDouble:56.75]]; 
    [event setLatspan:[NSNumber numberWithDouble:0.7]]; 
    [event setLonspan:[NSNumber numberWithDouble:0.88]]; 
    [event setName:@"Test 2"]; 

    if (![managedObjectContext save:&error]) { 
     NSLog(@"%@",[error description]); 
    } 

回答

12

的問題是,你叫insertNewObjectForEntityForName:inManagedObjectContext:只有一次,並使用相同的對象兩次。因此只插入一個項目,其現有屬性修改爲,則對同一對象的更改保存。

你需要在每個後續項目相同event變量再次調用insertNewObjectForEntityForName:inManagedObjectContext:,保存之後(這裏生產的管理對象都被自動釋放):

event = (Event *)[NSEntityDescription insertNewObjectForEntityForName:@"Event" inManagedObjectContext:managedObjectContext]; 

[event setLat:[NSNumber numberWithDouble:53.25]]; 
[event setLon:[NSNumber numberWithDouble:56.75]]; 
[event setLatspan:[NSNumber numberWithDouble:0.7]]; 
[event setLonspan:[NSNumber numberWithDouble:0.88]]; 
[event setName:@"Test 2"]; 

if (![managedObjectContext save:&error]) { 
    NSLog(@"%@",[error description]); 
}