iOS CoreData batch insert?

后端 未结 4 1697
你的背包
你的背包 2020-12-01 03:34

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

4条回答
  •  醉话见心
    2020-12-01 04:34

    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];
            }
        }];
    

提交回复
热议问题