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のようです-これを高速化するために私ができることは何ですか?それとも、制限に達したばかりですか?私は何かが欠けているに違いありません。