2015-06-02 2 views
0

Мы создаем приложение с локальной базой данных. На главном экране есть UISearchBar, и когда пользователь его выбирает, он может начать набирать и искать содержимое нашей базы данных (как IMDB или многие другие приложения).iOS: Как использовать UISearchDisplayController для поиска вместо фильтра

Наша проблема заключается в том, что мы выбрали UISearchDisplayController управлять переходом от UISearchBar (живой бар, идущий к верхней части экрана, яркость нижележащих UIView и т.д ....).

Теперь этот контроллер отлично работает, чтобы фильтровать содержимое списка в памяти. Мы следовали за this учебным пособием, и все прошло отлично.

Но это заставляет нас запускать поиск по основной теме. Если запустить поиск в фоновом потоке, т.е. внутри этого метода:

-(void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope { 

все короткие аварий возникают, так как -перезагрузка UITableView происходит перед/во время поиска работает.

Любая помощь в любом из этих вариантов можно только приветствовать:

1) управления, когда UISearchDisplayController вызывает методы перезагрузки данных.

2) Простой способ моделирования поведения этих контроллеров относительно переходов.

Заранее спасибо

+0

Не могли бы вы показать соответствующий код? – Jasper

+0

Нужно ли вам поддерживать iOS 7? Если нет, вы можете использовать новый 'UISearchController', который заменяет' UISearchDisplayController'. –

+0

К сожалению, мне нужно поддерживать iOS 7 – gonso

ответ

0

При выполнении поиска на фоне потока, вы делаете dispatch_async, чтобы обновить данные и загрузить вид таблицы на главном потоке?

Что-то вроде этого:

dispatch_async(dispatch_get_main_queue(), ^{ 
    // do stuff that belongs on the main thread 
}); 
+0

Да, я. Проблема в том, что я CANT контролирую, когда UISearchDisplayController перезагрузит таблицу. Как только filterContentForSearchText заканчивается (даже если мой блок все еще запущен) начинается перезагрузка таблицы, Im-гадание, вызванное UISearchDisplayController. – gonso