В вашем коде нет автозапуска пулов: D это означает, что вы храните 1000 объектов MyEntity в памяти, и это приведет к сбоям, и iOS закроет приложение (принудительное закрытие). Код должен выглядеть так:
for(int i = 0; i < 1000; i++) {
@autoreleasepool {
MyEntity *object = [NSEntityDescription insertNewObjectForEntityForName:@"MyEntity" inManagedObjectContext:[self managedObjectContext]];
object.name = [NSString stringWithFormat:@"%d", i];
object.age = [NSNumber numberWithInt:i];
}
}
[self managedObjectContext] save:nil];
OR
for(int i = 0; i < 1000; i++) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
MyEntity *object = [NSEntityDescription insertNewObjectForEntityForName:@"MyEntity" inManagedObjectContext:[self managedObjectContext]];
object.name = [NSString stringWithFormat:@"%d", i];
object.age = [NSNumber numberWithInt:i];
[pool drain];
}
[self managedObjectContext] save:nil];
Кроме того, это может быть не лучшим способом сделать подобные вещи, я бы предложил добавить его в контекст, а затем работать с самим контекстом, возможно, используя
[[NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:managedObjectContext] name] = [NSString stringWithFormat:@"%d", i];
или что-то в этом роде. Таким образом, вы не создаете локальную копию объекта и не забиваете память.
Используя последний из трех методов, я бы сделал это так:
for(int i = 0; i < 1000; i++) {
[NSEntityDescription insertNewObjectForEntityForName:@"MyEntity" inManagedObjectContext:[self managedObjectContext]];
[[NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:managedObjectContext] name] = [NSString stringWithFormat:@"%d", i];
[[NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:managedObjectContext] age] = [NSNumber numberWithInt:i];
}
[self managedObjectContext] save:nil];
И если этот MyEntity является вашим собственным классом, вы даже можете упростить свой код с помощью
@property(nonatomic, retain) id name;
@property(nonatomic, retain) id age;
Замените id name
и id age
правильной переменной и классом объекта, и ваш код будет еще проще:
for(int i = 0; i < 1000; i++) {
[NSEntityDescription insertNewObjectForEntityForName:@"MyEntity" inManagedObjectContext:[self managedObjectContext]];
[[NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:managedObjectContext] setName: [NSString stringWithFormat:@"%d", i]];
[[NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:managedObjectContext] setAge: [NSNumber numberWithInt:i]];
}
[self managedObjectContext] save:nil];
Надеюсь, это поможет и не смущает вас!