我的核心數據存儲包含51 Entry
實體,它們的message
屬性讀取「測試」。爲此做NSFetchRequest證實他們都在那裏。NSManagedObjectContext重置似乎丟失數據?
但是我有另一部分我的方法,它將用於內存密集型目的,處理大塊的NSData,所以我需要經常撥打[oldContext reset];
。
我有一個內存密集型方法,它從我的MOC中訪問大量的NSData。因此,它定期致電[oldContext reset];
。沒有這條線,它將耗盡內存。
我發現通過使用它雖然它沒有返回正確的結果。爲了測試這一點,我註釋了數據密集型代碼,留下的代碼返回了message
屬性,其中51個屬性設置爲「Test」(由單獨的NSFetchRequest確認)。
使用[oldContext reset];
但是,它只返回6個結果,消息設置爲「測試」。這是我正在使用的代碼:
NSFetchRequest *oldFetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *oldEntryEntity = [NSEntityDescription entityForName:@"Entry"
inManagedObjectContext:oldContext];
[oldFetchRequest setEntity:oldEntryEntity];
[oldFetchRequest setFetchBatchSize:10];
[oldFetchRequest setIncludesPropertyValues:NO];
NSArray *entrys = [oldContext executeFetchRequest:oldFetchRequest error:&error];
int totalEntries = [oldContext countForFetchRequest:oldFetchRequest error:nil];
int i = 0;
while (i < totalEntries) {
@autoreleasepool {
Entry *entry = [entrys objectAtIndex:i];
NSLog(@"message 1: %@", [entry valueForKey:@"message"]);
[oldContext reset];
i++;
}
}
任何想法爲什麼它沒有給出51「測試」結果它應該這樣做?
好吧,這解決了我的問題,但它使我的應用程序回到崩潰 - 這樣做的內存使用量增加了10倍。 – Andrew
這是簡化的示例應用程序崩潰嗎?或者你有一些額外的原始應用程序? – barley
原文。兩者的內存使用量都增加了10倍。 – Andrew