這就是我通過儀器運行我的應用程序時得到的結果。它正在處理大量的核心數據。我可以看到這顯然是不正確的,但我真的不知道這個截圖告訴我什麼。看起來是什麼問題?如果你有興趣,代碼,凝聚,是這樣的:
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(我在上面已經編輯)包裝它,之後它仍然墜毀發生這種情況:
這顯然得到了進一步推向代碼不是第一次,但它仍然崩潰。
不要刪除重要的代碼。然後我們必須猜測發生了什麼。您的提取請求甚至沒有設置正確。另外,我沒有看到你添加autoreleasepool的地方......你的數據庫有多大?你的媒體集和它們包含的圖像有多大?你是否在任何地方抓住物體?你是否清除了上下文? –
我已經把autoreleasepools現在。媒體集中的圖像是標準圖像的大小,我猜大約每個1mb,取決於照片。在上面的代碼之外,我沒有做任何與此有關的事情。我沒有清除上下文。 – Andrew