我正在执行一个返回大约 2000 个实体的获取请求。目前,在我的设备上这大约需要 20 秒。所以我想我可以将获取限制设置为 100,然后当用户滚动到表视图的末尾时,获取接下来的 100 个实体。这可以通过使用来完成NSFetchRequest's
setFetchLimit
and setFetchOffset
.
但是,我无法弄清楚的是,如果在第二次获取时获取对象 101-200,那么对象 1-100 会发生什么情况?我必须使用单独的NSFetchedResultsController
每 100 个项目,然后配置我的表视图数据源方法以基于多个获取结果控制器进行查询?或者我可以以某种方式使用相同的NSFetchedResultsController
以某种方式一次获取 100 个实体,但在每次后续获取时,只需将接下来的 100 个项目添加到原始 100 个项目中?
编辑:这是我的代码:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"MessageObject" inManagedObjectContext:appDelegate.managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *predicate= [NSPredicate predicateWithFormat:@"ANY tags.tagName==%@", currentTagObject.tagName];
[fetchRequest setPredicate:predicate];
NSSortDescriptor *sort= [[NSSortDescriptor alloc] initWithKey:@"createDate" ascending:NO selector:@selector(compare:)];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
[fetchRequest setFetchBatchSize:5];
实际上,您不需要执行任何操作即可实现批量获取您指定的大小。您只需在单个控制器上执行单个提取请求即可获得您所描述的行为 - 通过设置批处理大小属性,您只需向 CoreData 暗示您根据自己的考虑认为最佳的批处理大小。 CoreData 将按您需要的指定大小按顺序批量处理获取对象 - 并且在需要内存消耗时它将对托管对象进行故障处理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)