ipad – 使用Core Data高效显示100,000个项目

ipad – 使用Core Data高效显示100,000个项目,第1张

概述我使用NSFetchResultsController在UITableView中显示100,000条记录.这有效,但它很慢,特别是在iPad 1上.加载可能需要7秒钟,这对我的用户来说是一种折磨. 我也希望能够使用部分,但这至少会增加3秒的时间. 这是我的NSFetchResultsController: - (NSFetchedResultsController *)fetchedResults 我使用NSFetchResultsController在UItableVIEw中显示100,000条记录.这有效,但它很慢,特别是在iPad 1上.加载可能需要7秒钟,这对我的用户来说是一种折磨.

我也希望能够使用部分,但这至少会增加3秒的时间.

这是我的NSFetchResultsController:

- (NSFetchedResultsController *)fetchedResultsController {    if (self.clIEntsController != nil) {        return self.clIEntsController;    }    NSFetchRequest *request = [[NSFetchRequest alloc] init];    NSEntityDescription *entity = [NSEntityDescription entityForname:@"ClIEnt" inManagedobjectContext:self.managedobjectContext];    [request setEntity:entity];    [request setPredicate:[nspredicate predicateWithFormat:@"ManufacturerID==%@",self.manufacturerID]];    [request setFetchBatchSize:25];    NSSortDescriptor *sort = [[NSSortDescriptor alloc]  initWithKey:@"UDF1" ascending:YES];    NSSortDescriptor  *sort2= [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];    [request setSortDescriptors:[NSArray arrayWithObjects:sort,sort2,nil]];    NSArray *propertIEsToFetch = [[NSArray alloc] initWithObjects:@"name",@"ManufacturerID",@"CustomerNumber",@"City",@"StateProvince",@"PostalCode",@"UDF1",@"UDF2",nil];    [request setPropertIEsToFetch:propertIEsToFetch];    self.clIEntsController =    [[NSFetchedResultsController alloc] initWithFetchRequest:request                                        managedobjectContext:self.managedobjectContext sectionnameKeyPath:nil                                                   cachename:nil];    return self.clIEntsController;}

我有一个在我的nspredicate中使用的ManufacturerID索引.这看起来像一个非常基本的NSFetchRequest – 我能做些什么来加快这个速度?或者我刚刚达到了限制?我肯定错过了什么.

解决方法 第一:您可以使用NSFetchedResultsController的缓存来加速第一次获取后的显示.这应该很快就会下降到几分之一秒.

第二:您可以尝试仅显示第一个屏幕,然后在后台获取其余屏幕.我通过以下方式执行此 *** 作:

>出现视图时,检查是否有第一页缓存.
>如果没有,我会抓第一页.您可以通过设置获取请求的fetchlimit来完成此 *** 作.

>如果您正在使用部分,请执行两次快速提取以确定第一部分标题和记录.

>使用后台线程中的长提取来填充第二个提取的结果控制器.

>您可以创建子上下文并使用performBlock:或
>使用dispatch_async().

>将第二个FRC分配给表视图并调用reloadData.

这在我最近的一个关于>的项目中运作良好. 200K记录.

总结

以上是内存溢出为你收集整理的ipad – 使用Core Data高效显示100,000个项目全部内容,希望文章能够帮你解决ipad – 使用Core Data高效显示100,000个项目所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1080753.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存