Похоже, это будет работать, но подход значительно отличается от того, что Apple предлагает .Я предлагаю вам изменить несколько вещей:
1) Создать модель результатов поиска.Это так же, как ваши _displayItems, но содержит подмножество из них, соответствующих поиску.
@property (strong, nonatomic) NSMutableArray *searchResultDisplayItems;
2) Реализация - (BOOL) searchDisplayController: (UISearchDisplayController *) контроллер долженReloadTableForSearchString: (NSString *) searchString.Выполните поиск там:
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
[searchResultDisplayItems removeAllObjects];
// now we don't have to throw away the model all the time
for (Song *song in _playlistTab.collection) {
// and so on, your search code as you wrote it,
// but when you find a match...
[self.self.searchResultDisplayItems addObject:song];
}
return YES;
// no need to explicitly reload data now.
// answer YES and the search vc will do it for you
}
3) Когда таблица запрашивает счет, решите, какую модель использовать, исходя из того, какая таблица запрашивает
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// it's less typing to ask if tableView == self.tableView, but for clarity,
// I'll ask the converse question about which table we're using
if (tableView == self.searchDisplayController.searchResultsTableView) {
return [self.self.searchResultDisplayItems count];
} else {
return [self.displayItems count];
}
}
4) Когда таблица запрашиваетдля ячейки определите, какую модель использовать, исходя из того, какая таблица запрашивает:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"songCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
NSMutableArray * myModel = (tableView == self.searchDisplayController.searchResultsTableView)? self.searchResultDisplayItems : self.displayItems;
Song* song = [myModel objectAtIndex:indexPath.row];
cell.textLabel.text = song.title;
cell.detailTextLabel.text = song.artist;
return cell;
}