我的核心数据存储包含 51 个Entry
实体,它们的message
属性为“测试”。为此执行 NSFetchRequest 确认它们都在那里。
然而,我的方法的另一部分将用于内存密集型目的,处理大块 NSData,因此我需要[oldContext reset];
经常调用。
我有一个内存密集型方法,可以从我的 MOC 访问大量 NSData。因此,它会定期调用[oldContext reset];
. 没有这条线,它就会耗尽内存。
我发现通过使用它,它并没有返回正确的结果。为了测试这一点,我注释掉了数据密集型代码,留下了返回message
属性的代码,其中 51 个设置为“测试”(由单独的 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 个“测试”结果的任何想法?