Я очень много борюсь с этой проблемой. Некоторые сообщения касаются этой проблемы, но в моем случае не было решения.Результаты просмотра таблицы результатов UISearchController пустые
В чем проблема: я хотел бы показать некоторые результаты с помощью метода UISearchController. Мой исходный вид таблицы с пользовательской ячейкой отлично работает в том смысле, что все мои записи здесь, и она отображается, как я хочу.
Когда я использую панель поиска с кнопками масштаба, снова все работает отлично, мои отфильтрованные результаты правильно хранятся в списке, и даже моя пользовательская ячейка получает все, что нужно, в том смысле, что когда я проверяю ячейку атрибуты, это соответствует отфильтрованным записям ...
Но где я схожу с ума, это то, что отображаемый «новый» табличный вид (один с результатами) пуст (в том смысле, что весь вид заполнен с пустыми строками), несмотря на то, что отфильтрованные записи здесь и что cellForRowAtIndexPath выполняет свою работу (по крайней мере, пока она не станет отображаться).
Может ли кто-нибудь помочь мне разобраться с этим?
Код:
- (void)updateSearchResultsForSearchController:(UISearchController *)searchController {
NSPredicate *predicate;
NSString *searchText = searchController.searchBar.text;
NSInteger scope = searchController.searchBar.selectedScopeButtonIndex;
if (scope == 0) {
predicate = [NSPredicate predicateWithFormat:@"SELF.drugName contains[c] %@", searchText];
}
if (scope == 1) {
predicate = [NSPredicate predicateWithFormat:@"SELF.marque contains[c] %@", searchText];
}
else if (scope == 2) {
predicate = [NSPredicate predicateWithFormat:@"SELF.classFamily contains[c] %@", searchText];
}
NSMutableArray *tempArray = [NSMutableArray arrayWithArray:[[[SubstrateStore sharedStore] allSubstrates] filteredArrayUsingPredicate:predicate]];
self.filteredResults = [NSMutableArray arrayWithArray:tempArray];
[self.tableView reloadData]; // -> I tried to remove, to change the table view, etc, it does change anything
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
TableViewCell *cell = (TableViewCell *)[tableView dequeueReusableCellWithIdentifier:kCellIdentifier forIndexPath:indexPath];
Substrate *substrate = self.products[indexPath.row];
if (_searchController.active && ![_searchController.searchBar.text isEqualToString:@""]) {
substrate = self.filteredResults[indexPath.row];
}
[self configureCell:cell forProduct:substrate]; // when I check cell attributes (drugName,...), they are there...
return cell; // it works when no search is done (with the native table view) but the cell is not displayed when using the search bar (empty table view)
}
Я вам нужно больше кода ...
Спасибо!
1. Вы уверены, что 'tempArray' имеет какой-либо объект ?. 2. Вы уверены, что 'self.filteredResults' является правильным источником данных' self.tableView'? 3. Когда вы вызываете '[self.tableView reloadData]', вызывается любой из методов 'UITableViewDelegate'? – Ryan
Пробел был я забыл установить источник данных для себя для результатов tableview – Trichophyton