实现UITableViewDataSource会出错

时间:2014-08-26 14:09:55

标签: ios objective-c uitableview uisearchbar uisearchdisplaycontroller

目前我有一个带有UISearchBar的tableviewController。 UISearchBar和DisplayController具有tableviewcontroller的委托。所以它的设置如下:

-(void) initTableView{
    _tableView = [[POITableViewController alloc] init];
    [self.view addSubview:_tableView.view];
}

-(void) initSearchBar{
    _searchBar = [[UISearchBar alloc] init];
    _searchBar.delegate = _tableView;

    _tableView.searchController = [[UISearchDisplayController alloc] initWithSearchBar:_searchBar contentsController:self];
    _tableView.searchController.delegate = _tableView;
    _tableView.searchController.searchResultsDataSource = _tableView;
    _tableView.searchController.searchResultsTableView.delegate = _tableView;

    [self.view addSubview:_searchBar];
}

现在我的tableviewcontroller中的每个必需方法都需要这样做:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    if (tableView == self.searchController.searchResultsTableView){
        return _searchResults.count;
    }
    else
        return _data.count;
}

是否可以编写这种清洁剂,以便在测试时不需要这样做?

我可以创建一个扩展NSObject但是实现UITableViewDataSource的类,以便搜索栏使用它作为填充吗?因为我尝试但是它给了我一个错误:

@interface SearchBarDataSource : NSObject <UITableViewDataSource>
@property (nonatomic, strong) NSArray * _searchResults;
@end

我实施numberofrowsinsections和cellforrowatindexpath。

然后我创建了我的搜索栏:

_searchBar = [[UISearchBar alloc] init];

_searchBar.delegate = _tableView;

_tableView.searchController = [[UISearchDisplayController alloc] initWithSearchBar:_searchBar contentsController:self];
_tableView.searchController.delegate = _tableView;
_tableView.searchController.searchResultsDataSource = [[SearchBarDataSource alloc] init];
_tableView.searchController.searchResultsTableView.delegate = _tableView;

[self.view addSubview:_searchBar];

将resultdatasource设置为我自己的。但是这给了我

[UIGestureRecognizerTarget tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0xafa42b0
2014-08-26 16:00:47.406 Cronos Care[43230:70b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIGestureRecognizerTarget tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0xafa42b0'

有人可以帮我这个吗?

0 个答案:

没有答案