【发布时间】:2012-09-26 12:17:22
【问题描述】:
我的核心数据存储包含 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 个“测试”结果有什么想法吗?
【问题讨论】:
标签: iphone objective-c ios core-data managedobjectcontext