私はこれに関連するさまざまなことについて同様の質問を投稿しましたが、これに約1週間苦労していて、役に立たなかった。それはすべてこのコードに帰着します:
NSFetchRequest *oldFetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *oldEntryEntity = [NSEntityDescription entityForName:@"Media"
inManagedObjectContext:oldContext];
[oldFetchRequest setEntity:oldEntryEntity];
[oldFetchRequest setFetchBatchSize:10];
NSArray *medias = [oldContext executeFetchRequest:oldFetchRequest error:&error];
int i = 0;
int count = [oldContext countForFetchRequest:oldFetchRequest error:nil];
NSLog(@"count: %i", count);
while (i < count) {
@autoreleasepool {
NSManagedObject *media = [medias objectAtIndex:i];
[oldContext refreshObject:media mergeChanges:NO];
NSLog(@"i: %i", i);
i++;
}
}
media
アイテムの数である約250に達するはずです。アプリがメモリを使い果たしてクラッシュする前に、実際には約100に達します。このコードが実行されるたびに、メモリがどんどん増えていきます。おそらく、それぞれmedia
に大きな属性を含む多数のNSData属性が含まれているためです。Instrumentsは、コードが実行されるたびにメモリが増加することを示しています。
@autoreleasepool
そしてrefreshObject:mergeChanges:
私はこの問題を解決するために追加しましたが、うまくいきませんでした。
私がやろうとしているのは、このストアのすべてのアイテムを手動で新しいストアに移動することです。これは、標準の移行では大きなデータでは機能しないためです。これが出発点です。