objective-c - 批处理核心数据获取结果

标签 objective-c ios cocoa core-data

我正在执行一个返回大约 2000 个实体的获取请求。目前,这在我的设备上大约需要 20 秒。所以我想我可以将获取限制设置为 100,然后当用户滚动到 TableView 的末尾时,获取接下来的 100 个实体。这可以使用 NSFetchRequest 的 setFetchLimitsetFetchOffset 来完成。

但是,我想不通的是,如果在我第二次提取对象 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/

相关文章:

ios - 从 Objective-C 中的描述字符串中获取日期

iOS 获取今天的日期和月份作为 int

iphone - 取消引用空指针,警告

ios - 在界面构建器中隐藏一些 View

ios - 在保存到目录之前在 UIImage 中调整图像大小

ios - 使用 NSFetchRequest (CoreData) 填充数组

objective-c - 如何在 Cocoa 中的自定义 NSCell 上双击时调用操作?

objective-c - CATransition 到其他 View 有效,转换回来时崩溃

objective-c - Cocoa Zombies - 识别消息来源

iphone - 为过滤器构建 NSPredicate