2

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]; 
} 

答えて

0

。つまり、遅れを引き起こすのはFRCの創造ではないということです。

メインスレッドで検索クエリを実行していますか? これは遅れの原因の1つになる可能性があります。 これは、最初のクエリが後続のクエリより遅れていることを説明することもできます。検索文字列が長くなり、結果が絞り込まれ(処理時間も少なくて済むため)、クエリが高速に実行される可能性があります。

Idでは、キーを押すたびに0.1〜0.3秒待ってから検索を実行することをお勧めします。これにより、ユーザーが長いクエリを入力するときに不要な検索クエリが減少します。また、検索中にGUIをロックしないように、別のスレッドで検索を実行するようアドバイスします。検索スレッドが終了すると、メインスレッドへのコールバックを実行し、その結果で画面を更新します。

関連する問題