0

我添加了搜索栏跟随教程,但由于某种原因,搜索不显示结果。

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

混帐: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;
}

我尝试放置 NSlog 并得到这个 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];
            }
        }
    }
}
4

1 回答 1

0

有几个问题。

  1. self.searchDisplayControllernil因为您没有在情节提要中设置该出口。按住 Ctrl 键从“Books Table View Controller”拖动到“Search Display Controller”并选择“searchDisplayController”插座。

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

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

如果您解决了这些问题,您应该能够看到一些搜索结果。

备注:这条线

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

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

如果正确,则不需要以下内容if (nil == cell) { ... },因为该方法总是从原型返回一个单元格。

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

于 2012-11-14T09:33:47.573 回答