2011-03-07 57 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]); 
}