Я использую UISearchController и подклассифицированный UITableViewController в качестве моего контроллера результатов для выполнения поисковых запросов в REST API в Интернете.UISearchController + ResultsController - Manual Data Reload
Вместо фильтрации результатов с помощью метода делегирования updateSearchResultsForSearchController я хотел, чтобы пользователь мог ввести запрос, нажать «пойти» на клавиатуре и затем представить возвращенные результаты в контроллере результатов.
После выполнения запроса я могу заставить контроллер результатов загрузить мои результаты, однако представление таблицы не перезагружает данные, когда я прошу об этом. Вместо этого мне нужно перетащить на стол, чтобы он мог правильно перезагрузить.
Мой вопрос: есть ли способ заставить контроллер результатов обновить вручную после выполнения моего запроса? Я попытался вызвать [self.searchcontroller.searchresultscontroller.tableVIew reloadData], но не смог получить массив результатов для правильной загрузки.
код настройки поиска Контроллер
//Setup search controller
_resultsController = [[RxLookupResultsViewController alloc] init];
_searchController = [[UISearchController alloc] initWithSearchResultsController:_resultsController];
[self.searchController.searchBar sizeToFit];
self.searchController.searchResultsUpdater = self;
self.tableView.tableHeaderView = self.searchController.searchBar;
[self.searchController.searchBar setReturnKeyType:UIReturnKeyGo];
self.resultsController.tableView.delegate = self;
self.searchController.delegate = self;
self.searchController.dimsBackgroundDuringPresentation = YES;
self.searchController.searchBar.delegate = self;
self.searchController.searchBar.tintColor = [UIColor darkTextColor];
//NSArray *scope = @[@"Scope 1", @"Scope 2"];
//self.searchController.searchBar.scopeButtonTitles = scope;
self.searchController.searchBar.showsScopeBar = NO;
self.definesPresentationContext = YES;
После запроса выполняется на основе текста строке поиска, я бегу следующее:
_resultsController.filteredCodes = searchResultsDrugNames;
[_resultsController.tableView reloadData];
Любые указатели? Я уверен, что его что-то простое, что я проглядываю, мог бы использовать свежий набор глаз на этом.
Спасибо!
Вы вызываете reloadData при завершении сетевого запроса? И вы вызываете reloadData в основном потоке? В вашем коде не отображаются оба условия, которые необходимы для правильного обновления данных. – Daniel
Бах! он вызывался в фоновом потоке. выполнил селектор на основном потоке, и он сработал. * facepalm * –