我在 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
我缺少什么来填充搜索显示控制器表?