コア データ コードに時間がかかりすぎたので、ほとんどの行をコメント アウトして、次のように簡略化しました。
NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent:@"CoreDataStore.sqlite"];
NSString *backupSourceStorePath = [[self applicationDocumentsDirectory]
stringByAppendingPathComponent:@"CoreDataStoreBackup.sqlite"];
NSManagedObjectContext *oldContext = [self version1ManagedObjectContext];
TICDSSynchronizedManagedObjectContext *newContext = [self managedObjectContext];
NSFetchRequest *oldFetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *oldEntryEntity = [NSEntityDescription entityForName:@"Entry"
inManagedObjectContext:oldContext];
[oldFetchRequest setEntity:oldEntryEntity];
int numberOfEntries = [oldContext countForFetchRequest:oldFetchRequest error:nil];
int batchSize = 10;
[oldFetchRequest setFetchLimit:batchSize];
int offset = 0;
while (numberOfEntries - offset > 0) {
[oldFetchRequest setFetchOffset:offset];
NSError *error;
NSArray *entries = [oldContext executeFetchRequest:oldFetchRequest error:&error];
int i = 0;
for (NSManagedObject *entry in entries) {
Entry *newEntry = [NSEntityDescription insertNewObjectForEntityForName:@"Entry"
inManagedObjectContext:newContext];
i++;
NSLog(@"i: %i", i);
}
[newContext save:&error];
NSLog(@"Save error: %@", error);
offset = offset + batchSize;
}
そこに行がなければinsertNewObjectForEntityForName
、保存にそれほど時間はかかりません。しかし、その行では、保存に約 1 分かかります。これより前のデータ ストアには他に何もありません。これが起こっている理由は何ですか?