这就是我通过仪器运行我的应用程序时得到的。它正在处理大量核心数据。我可以看到这显然是不对的,但我真的不知道这个屏幕截图告诉我什么。似乎是什么问题?如果您有兴趣,浓缩后的代码是这样的:
NSFetchRequest *oldFetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *oldEntryEntity = [NSEntityDescription entityForName:@"Entry"
inManagedObjectContext:oldContext];
[oldFetchRequest setEntity:oldEntryEntity];
int numberOfEntries = [oldContext countForFetchRequest:oldFetchRequest error:nil];
int batchSize = 4;
[oldFetchRequest setFetchLimit:batchSize];
int offset = 0;
while (numberOfEntries - offset > 0) {
@autoreleasepool {
[oldFetchRequest setFetchOffset:offset];
NSError *error;
NSArray *entries = [oldContext executeFetchRequest:oldFetchRequest error:&error];
for (NSManagedObject *entry in entries) {
@autoreleasepool {
Entry *newEntry = [NSEntityDescription insertNewObjectForEntityForName:@"Entry"
inManagedObjectContext:newContext];
newEntry.entryID = [entry valueForKey:@"entryID"];
NSMutableOrderedSet *newMediaSet = [[NSMutableOrderedSet alloc] init];
NSOrderedSet *mediaSet = [entry valueForKey:@"media"];
int i = 0;
for (NSManagedObject *media in mediaSet) {
Media *newMedia = [NSEntityDescription insertNewObjectForEntityForName:@"Media"
inManagedObjectContext:newContext];
newMedia.isInPhotoLibrary = [media valueForKey:@"isInPhotoLibrary"];
newMedia.positionInEntry = [NSNumber numberWithDouble:i + 1];
MediaImageData *imageData = [NSEntityDescription insertNewObjectForEntityForName:@"MediaImageData"
inManagedObjectContext:newContext];
imageData.data = [media valueForKey:@"originalImage"];
newMedia.imageData = imageData;
newMedia.entry = newEntry;
[newMediaSet addObject:newMedia];
i++;
}
newEntry.media = newMediaSet;
}
}
[newContext save:&error];
offset = offset + batchSize;
}
}
编辑:我按照这里给出的建议,将它包装在@autoreleasepools(我已经在上面编辑过)中,发生这种情况后它仍然崩溃:
它显然比第一次更深入代码,但它仍然崩溃。