使用CoreData插入多个对象

Lee*_*ong 1 iphone core-data objective-c

我有一种情况,我想用一些条目预先填充CoreData DB.由于这是在运行时完成的,因为检测到一些事情,所以我需要在代码中执行此操作.

我有这个代码的问题,它只插入第二个....

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]);
    }
Run Code Online (Sandbox Code Playgroud)

Bol*_*ock 12

问题是你insertNewObjectForEntityForName:inManagedObjectContext:只调用一次,并使用相同的对象两次.因此,只插入一个项目,修改其现有属性,然后保存对同一对象的更改.

在保存之后,您需要为每个后续项目insertNewObjectForEntityForName:inManagedObjectContext:再次调用相同的event变量(此处生成的托管对象都是自动释放的):

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]);
}
Run Code Online (Sandbox Code Playgroud)