In my iPhone application, i need to insert ~2000 records into Core Data before the user can use any features of the application. I am loading the records into CoreData from
I like @Suragch 's answer very much. This is the Objective-C version for it.
NSManagedObjectContext *managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType: NSPrivateQueueConcurrencyType];
managedObjectContext.persistentStoreCoordinator = [[UIApplication sharedApplication].delegate.persistentStoreCoordinator];
[managedObjectContext performBlock:^{
while (true) {
@autoreleasepool {
// Code that creates autoreleased objects.
NSArray *batchObjects = [self getNextBatchOfObjects];
if (!batchObjects) {
break;
}
for (id item in batchObjects) {
MyEntity *newItem = [NSEntityDescription insertNewObjectForEntityForName:@"MyEntity" inManagedObjectContext:managedObjectContext];
newObject.attribute1 = item.whatever;
newObject.attribute2 = item.whoever
newObject.attribute3 = item.whenever
}
}
// only save once per batch insert
NSError *error = nil;
[managedObjectContext save:&error];
[managedObjectContext reset];
}
}];