gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:13:50 25 4
gpt4 key购买 nike

我正在使用 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;

}

我有一个关于ManufacturerID的索引,它在我的NSPredicate中使用。这似乎是一个非常基本的 NSFetchRequest - 我可以做些什么来加快速度?或者我刚刚遇到了限制?我一定是错过了什么。

最佳答案

首先:您可以使用NSFetchedResultsController的缓存来加快第一次获取后的显示速度。这应该很快就会下降到几分之一秒。

第二:你可以尝试只显示第一屏,然后在后台获取其余的。我通过以下方式执行此操作:

  • 当 View 出现时,检查您是否有首页缓存。
  • 如果没有,我会获取第一页。您可以通过设置提取请求的 fetchLimit 来完成此操作。
    • 如果您使用节,请执行两次快速提取以确定第一个节标题和记录。
  • 在后台线程中使用长提取填充第二个提取结果 Controller 。
    • 您可以创建子上下文并使用 performBlock:
    • 使用dispatch_async()
  • 将第二个 FRC 分配给 TableView 并调用 reloadData

这在我最近的一个拥有超过 200K 条记录的项目中效果非常好。

关于ipad - 使用 Core Data 高效显示 100,000 个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14707201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com