批处理核心数据获取结果

Sno*_*man 7 cocoa core-data objective-c ios

我正在执行一个返回大约2000个实体的获取请求.目前,我的设备上大约需要20秒.所以我想我可能会将获取限制设置为100,然后当用户滚动到表视图的末尾时,获取接下来的100个实体.这可以使用NSFetchRequest's setFetchLimit和完成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];
Run Code Online (Sandbox Code Playgroud)

isa*_*aac 4

实际上,您不需要执行任何操作即可实现批量获取您指定的大小。您只需在单个控制器上执行单个提取请求即可获得您所描述的行为 - 通过设置批处理大小属性,您只需向 CoreData 暗示您根据自己的考虑认为最佳的批处理大小。CoreData 将按照您需要的大小指定顺序批量处理对象的获取 - 并且在内存消耗需要时,它会出现托管对象故障。