私のコア データ ストアには、 "Test" という属性を持つ51Entry
個のエンティティが含まれています。message
これに対して NSFetchRequest を実行すると、それらがすべて存在することが確認されます。
ただし、メソッドには別の部分があります。これは、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の「テスト」結果を出さないのかについて何か考えはありますか?