我也希望能够使用部分,但这至少会增加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个项目所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)