0

我在 TableViewController 中有一个带有表格视图的“搜索栏和搜索显示控制器”。

我正在尝试进行搜索,以便当用户在搜索框中输入文本时,会发出 ajax 请求并进行搜索并返回数据。这工作得很好,但由于某种原因,搜索显示控制器表永远不会被填充。

搜索显示控制器委托设置为情节提要中的视图控制器,所有其他连接都根据我一直尝试使用的教程很好地缝合,但我从未在搜索结果表中得到任何结果。

当我用数据填充初始表然后单击搜索框(因此键盘和所有内容都显示出来)时,我可以看到背景中的原始表变灰。但是一旦我开始打字,一切都消失了,并显示了一个空白表格。

我的 numberOfRowsInSection 和 cellForRowAtIndexPath 有时会被调用,但如果基表中没有数据(仅当我预先填充基表时),则永远不会调用。但即使这些是从搜索显示控制器内部的接缝中调用并返回正确的值,表格总是保持为空。

我的视图控制器代码是:

#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

我缺少什么来填充搜索显示控制器表?

4

0 回答 0