0

TableViewController にテーブル ビューを持つ「検索バーと検索ディスプレイ コントローラー」があります。

ユーザーが検索ボックスにテキストを入力すると、ajax リクエストが出て検索を実行し、データを返すように、検索を実行しようとしています。これは正常に機能していますが、何らかの理由で、Search Display Controller テーブルに値が入力されません。

Search Display Controller デリゲートは、ストーリーボードのビュー コントローラーに設定されており、他のすべての接続は、私が使用しようとしているチュートリアルに基づいて正常に縫い合わされていますが、検索結果テーブルに結果が表示されません。

最初のテーブルにデータを入力してから検索ボックスをクリックすると (キーボードとすべてが表示されます)、元のテーブルが背景に灰色で表示されます。しかし、入力を開始するとすぐに、すべてが消えて空白のテーブルが表示されます。

numberOfRowsInSection と cellForRowAtIndexPath が呼び出されることがありますが、ベース テーブルにデータがない場合 (ベース テーブルに事前入力した場合のみ) は呼び出されません。しかし、これらが Search Display Controller 内の継ぎ目から呼び出されて正しい値を返す場合でも、テーブルは常に空のままです。

私のView Controllerコードは次のとおりです。

#import "SearchController.h"

static const NSString * LOG_KEY = @"SearchController";

@interface SearchController ()

@end

@implementation SearchController

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.searchLocations = [SearchLocations getInstance];
}

- (void)viewDidAppear:(BOOL)animated
{
    //doesn't seam to be working
    //[self.searchBar becomeFirstResponder];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/* Data source table */
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSLog(@"rows in table: %u", [self.searchLocations.locations count]);
    // Return the number of rows in the section.
    return [self.searchLocations.locations count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"%@ new cell", LOG_KEY);
    SearchLocationCell * cell = (SearchLocationCell *)[tableView dequeueReusableCellWithIdentifier:@"searchLocationCell"];

    if (cell == nil) {
        cell = [[SearchLocationCell alloc] init];
    }

    cell.nameLabel.text = [self.searchLocations getLocationValue:@"name" forIndex:indexPath.row];

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
}

/* Search bar methods */
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
    NSLog(@"%@ should reload table for string: %@", LOG_KEY, searchString);
    return YES;
}

- (void)searchDisplayController:(UISearchDisplayController *)controller didLoadSearchResultsTableView:(UITableView *)tableView
{
    NSLog(@"%@ didLoadSearchResultsTableView", LOG_KEY);
}

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    //we need at least 3 chars to search
    if ([searchText length] > 2)
    {
        [self.searchLocations getSearchResultsForString:searchText isFullSearchTerm:NO withCallback:self];
    }
}

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
}

/* SearchProtocol methods */
- (void)resultsLoaded
{
    NSLog(@"%@ resultsLoaded", LOG_KEY);
    //[self.tableView reloadData];
}

- (void)searchError
{
    NSLog(@"%@ searchError", LOG_KEY);
}

- (void)viewDidUnload
{
    [self setSearchBar:nil];
    [self setSearchBar:nil];
    [self setSearchBar:nil];
    [super viewDidUnload];
}
@end

Search Display Controller テーブルにデータを入力するために何が欠けていますか?

4

0 に答える 0