搜索效果不佳(使用storyBoard,核心数据)

时间:2012-11-14 07:22:40

标签: ios search core-data storyboard uisearchbar

我添加搜索栏按照教程,但由于某种原因,搜索不会显示结果。

注意:我在第2行添加“self tableView”以避免错误。 也许这就是问题?或IF的问题?

git:https://github.com/dennis87/git_bookList

我认为问题在于此代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    //cell create
    if (nil == cell)
    {
        UITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault
                                                        reuseIdentifier:CellIdentifier];
    }

    if (tableView == self.searchDisplayController.searchResultsTableView)
    {
        NSLog(@"Configuring cell to show search results");
        Books *book = [[self searchResults]objectAtIndex:indexPath.row];
        [[cell textLabel]setText:[book title]];
    }
    else
    {
        NSLog(@"Configuring cell to show normal data");
        Books *book = [[self fetchResultsController]objectAtIndexPath:indexPath];
        [[cell textLabel]setText:[book title]];
    }
    return cell;
}

我试过放NSlogs并得到这个NSLog永远不会打印,所以问题可能与IF有关吗? 我做错了什么?

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
    NSLog(@"Previous Search Results were removed.");
    [self.searchResults removeAllObjects];

    for (Books *book in [self.fetchResultsController fetchedObjects])
    {
        if ([scope isEqualToString:@"All"] || [book.title isEqualToString:scope])
        {
            NSLog(@"entered");
            NSComparisonResult result = [book.title compare:searchText
                                                   options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)
                                                     range:NSMakeRange(0, [searchText length])];
            if (result == NSOrderedSame)
            {
                NSLog(@"Adding book.title '%@' to searchResults as it begins with search text '%@'", book.title, searchText);
                [self.searchResults addObject:book];
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

有几个问题。

  1. self.searchDisplayControllernil,因为您尚未在故事板中设置该出口。按住Ctrl键并从“Books Table View Controller”拖动到“Search Display Controller”并选择“searchDisplayController”插座。

  2. 您的filterContentForSearchText方法会检查scope的值,但这是nil,因为您尚未在搜索栏中定义任何范围。

  3. numberOfSectionsInTableView应返回1搜索结果表视图。

  4. 如果你解决了这些问题,你应该可以看到一些搜索结果。

    备注:此行

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    

    对我来说似乎很可疑。即使搜索结果表视图,您也要求self.tableView将单元格出列。我在SO上的某个地方已经看到了将原型单元格与搜索显示一起使用的方法,这可能是正确的,但我有一点疑问。

    如果它是正确的,那么您不需要以下if (nil == cell) { ... },因为该方法总是返回原型中的单元格。

    您还应注意,在if (nil == cell) { ... }块内,您将值分配给局部变量cell,而不是外部范围中的变量。