核心数据:利用缓存时的批处理错误

时间:2012-11-16 07:58:05

标签: ios core-data

在“核心数据编程指南”中,Apple推荐了一种批量触发对象集合的方法,它应该如下实现:

NSArray * arrayOfFaults = [NSArray arrayWithObjects:object1,object2,nil];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self IN %@", arrayOfFaults];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Foo"];
[fetchRequest setPredicate:predicate];
[fetchRequest setReturnsObjectsAsFaults:NO];
[managedObjectContext executeFetchRequest:fetchRequest error:NULL];

然而,在iOS 6模拟器上使用“核心数据”仪器,我发现这个提取几乎与其他提取一样。换句话说,它进入磁盘并且没有使用缓存。这是不合理的。由于它是一个“IN”子句,因此Core Data可以使用objectID在缓存中查找对象。如果可以在缓存中找到所有磁盘,则无需转到磁盘。

我很确定arrayOfFaults中的这些对象在缓存中。如果我用上面的代码替换上面的代码,则不报告缓存未命中:

for (NSManagedObject *object in arrayOfFaults){
   [object willAccessValueForKey:nil];
}

所以我的问题是:有没有办法在利用缓存的同时批处理故障对象?

0 个答案:

没有答案