使用NSFetchedResultsController执行搜索

Vik*_*ngs 2 search core-data objective-c nsfetchedresultscontroller ios

我有一个带有我的表视图的搜索栏,但我没有使用a UISearchDisplayController来显示结果,而是使用我的表视图.

我的代码似乎有用,但我想知道这是否可以接受.当用户开始输入时,我添加一个谓词来执行搜索,当用户删除搜索栏内的文本时,我NSFetchResultsController无法获取所有内容.

我在这里做了什么可怕的错误,还是有更好的方法来做到这一点?

- (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];
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*kle 6

我唯一不同的是在你有大量记录的情况下为结果添加一个提取限制,但是,这个方法没有任何问题.

也许是这样的

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name contains[cd] %@", searchText];
[[_fetchedResultsController fetchRequest] setPredicate:predicate];
[[_fetchedResultsController fetchRequest] setFetchLimit:50];
Run Code Online (Sandbox Code Playgroud)