0

チュートリアルに従って検索バーを追加しましたが、何らかの理由で検索に結果が表示されません。

注: エラーを回避するために、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];
            }
        }
    }
}
4

1 に答える 1

0

いくつかの問題があります。

  1. self.searchDisplayControllernilストーリーボードでそのアウトレットを設定していないためです。「Books Table View Controller」から「Search Display Controller」まで Ctrl キーを押しながらドラッグし、「searchDisplayController」アウトレットを選択します。

  2. メソッドfilterContentForSearchTextは の値をチェックしますがscope、これnilは検索バーでスコープを定義していないためです。

  3. numberOfSectionsInTableView1検索結果テーブル ビューに返されます。

これらの問題を修正すると、いくつかの検索結果が表示されるはずです。

備考:この行

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

私には疑わしいようです。self.tableView検索結果テーブル ビューに対しても、セルをデキューするように要求します。プロトタイプセルを検索表示で使う方法としてSOのどこかで見たことがあり、正しいかもしれませんが、少し疑問があります。

正しい場合、次のメソッドは必要ありませんif (nil == cell) { ... }。そのメソッドは常にプロトタイプからセルを返すためです。

if (nil == cell) { ... }また、ブロック内cellでは、外部スコープの変数ではなく、ローカル変数に値を代入することに注意してください 。

于 2012-11-14T09:33:47.573 に答える