我正在执行一个返回大约 2000 个实体的获取请求。目前,这在我的设备上大约需要 20 秒。所以我想我可以将获取限制设置为 100,然后当用户滚动到 TableView 的末尾时,获取接下来的 100 个实体。这可以使用 NSFetchRequest 的
setFetchLimit
和 setFetchOffset
来完成。
但是,我想不通的是,如果在我第二次提取对象 101-200 时,对象 1-100 会发生什么情况?我是否必须为每 100 个项目使用单独的 NSFetchedResultsController
,然后将我的 TableView 数据源方法配置为基于多个获取结果 Controller 进行查询?或者我能否以某种方式使用相同的 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];
最佳答案
您实际上不需要做任何事情来实现您指定大小的批量提取。您将获得您所描述的行为,只需在单个 Controller 上执行单个获取请求 - 通过设置批量大小属性,您只是向 CoreData 提示您根据自己的考虑认为最佳批量大小。 CoreData 将处理按您需要指定大小的连续批处理获取对象 - 并且在需要内存消耗时它将对托管对象进行故障处理。
关于objective-c - 批处理核心数据获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11165348/