UISearchBar
にはNSFetchedResultsController
が付いています。コアデータを最適化する方法NSFetchedResultsController with UISearchBar?
ユーザーが検索バーにテキストを入力するときに検索します。私は最初のいくつかの手紙が遅れていることに気がついたが、その後それは速くなり、遅れはない。初期の遅れを減らし、検索を非常にうまくいかせる方法はありますか?ホードは、私は、ユーザーが検索文字列を変更するたびに新しいFetchedResultsControllerを作成することがわかります投稿コードに基づいて
- (void)filterResultsUsingString:(NSString *)filterString {
self.billingSearchText = filterString;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
NSEntityDescription *entity = nil;
if ([self.billingSearchCategory isEqualToString:@"icd9"]) {
entity = [NSEntityDescription entityForName:@"ICD9" inManagedObjectContext:managedObjectContext];
}
else if ([self.billingSearchCategory isEqualToString:@"cpt"]) {
entity = [NSEntityDescription entityForName:@"CPT" inManagedObjectContext:managedObjectContext];
}
[fetchRequest setEntity:entity];
[sortDescriptors release];
[sortDescriptor release];
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
[fetchRequest release];
NSPredicate *predicate =[NSPredicate predicateWithFormat:@"(name contains[cd] %@) OR (code contains[cd] %@)", self.billingSearchText, self.billingSearchText];
[self.fetchedResultsController.fetchRequest setPredicate:predicate];
NSError *error = nil;
if (![[self fetchedResultsController] performFetch:&error])
{
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
exit(-1); // Fail
}
[self.tableView reloadData];
}