IOS / xcode:带有FETched结果控制器的TableView搜索栏

时间:2015-04-18 22:16:34

标签: ios core-data nsfetchedresultscontroller searchbar

您好我正在尝试使用核心数据和NSFetchedResults控制器为表视图实现搜索栏功能。

有很多关于SO的答案建议使用谓词进行搜索,使用类似下面的代码:

- (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];
        [[_fetchedResultsController fetchRequest] setFetchLimit:50];
    }

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

    [[self tableView] reloadData];
}

我也试过这种变化。但是,在每种情况下,我都有同样的问题。

首先,当你搜索时,它说没有结果。此外,如果您输入几个字母并点击x,则会出现灰色屏幕,如果再次单击,则会获得正常的表格视图。

然而,在输入一封信并看到"没有结果"如果你点击取消,你会得到你应该得到的结果。一旦发生这种情况,您无法在不重建项目的情况下返回完整的tableview。

我到目前为止唯一的想法是它可能与_fetchedResultsController和fetchedResultsController有关(此源文件中的属性是没有下划线的ftchedResultsController)但是只更改那些抛出错误消息。

感谢您就可能导致此问题的任何建议。

1 个答案:

答案 0 :(得分:1)

您有两个表视图,一个来自搜索,另一个来自主表。如果要使用搜索隐含的过滤器继续显示主表视图,则应禁用搜索控制器的表视图。

self.searchResultsController.active = NO;

您可以在每次搜索栏将此设置为YES时设置此项,例如在textDidChange中。在FRC getter中,检查搜索栏中的任何字符串,并在必要时添加谓词。在textDidChange {FR} nil reloadData {{1}}。就是这样。