Sle*_*lee 5 core-data nsfetchrequest ipad
我使用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;
}
Run Code Online (Sandbox Code Playgroud)
我有一个在我的NSPredicate中使用的ManufacturerID索引.这看起来像一个非常基本的NSFetchRequest - 我能做些什么来加快这个速度?或者我刚刚达到了限制?我肯定错过了什么.
第一:NSFetchedResultsController在第一次获取后,您可以使用缓存来加速显示.这应该很快就会下降到几分之一秒.
第二:您可以尝试仅显示第一个屏幕,然后在后台获取其余屏幕.我通过以下方式执行此操作:
fetchLimit.
performBlock:或dispatch_async().reloadData.这在我最近的一项有超过200K记录的项目中运作良好.
| 归档时间: |
|
| 查看次数: |
1318 次 |
| 最近记录: |