2

テーブル ビューに検索バーがありますがUISearchDisplayController、結果を表示するために を使用しておらず、代わりにテーブル ビューを使用しています。

私が持っているコードは機能しているように見えますが、それが許容できるものかどうか疑問に思っています。ユーザーが入力を開始すると、述語を追加して検索を実行します。ユーザーが検索バー内のテキストを削除すると、NSFetchResultsControllerすべてをフェッチするために nil アウトします。

私はここでひどく間違ったことをしていますか、それとももっと良い方法がありますか?

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    if ([searchText length] == 0) {
        _fetchedResultsController = nil;
    }
    else {
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name contains[cd] %@", searchText];
        [[_fetchedResultsController fetchRequest] setPredicate:predicate];
    }

    NSError *error;
    if (![[self fetchedResultsController] performFetch:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    }

    [[self tableView] reloadData];
}
4

2 に答える 2

6

私が行う唯一の違いは、大量のレコードがある場合に結果にフェッチ制限を追加することですが、はい、この方法には何の問題もありません。

多分何かのような

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name contains[cd] %@", searchText];
[[_fetchedResultsController fetchRequest] setPredicate:predicate];
[[_fetchedResultsController fetchRequest] setFetchLimit:50];
于 2013-05-17T20:20:43.913 に答える