2015-11-17 2 views
0

Я использую 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]; 

Любые указатели? Я уверен, что его что-то простое, что я проглядываю, мог бы использовать свежий набор глаз на этом.

Спасибо!

+0

Вы вызываете reloadData при завершении сетевого запроса? И вы вызываете reloadData в основном потоке? В вашем коде не отображаются оба условия, которые необходимы для правильного обновления данных. – Daniel

+0

Бах! он вызывался в фоновом потоке. выполнил селектор на основном потоке, и он сработал. * facepalm * –

ответ

1

Комментарий Daniel Z о том, что перезагрузка, вызываемая в основной теме, была решением. Забытый запрос вызывался в фоновом потоке.

+0

Я рад, что вы заработали. – Daniel

Смежные вопросы