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 テーブルにデータを入力するために何が欠けていますか?