Я пытаюсь ускорить поиск своего приложения, он становится отстающим, когда есть много данных.
поэтому я пытаюсь разделить поиск Predicate на UI с помощью dispatch_async
not dispatch_sync
, потому что я не использую его.
Проблема заключается в том, что когда я использую dispatch_async
, приложение иногда появляется, потому что [__NSArrayI objectAtIndex:]: index "17" beyond bounds
.
Теперь я это сделал, потому что позволяет сказать, что первый по-прежнему работает и перезагружает tableView, и продолжить поиск изменит размер массива в зависимости от результата, поэтому в этом случае "CRASH": (
это мой код:
dispatch_async(myQueue, ^{
searchArray = [PublicMeathods searchInArray:searchText array:allData];
} );
if(currentViewStyle==listViewStyle){
[mytable reloadData];
}
и я пробовал это:
dispatch_async(myQueue, ^{
NSArray *tmpArray = [PublicMeathods searchInArray:searchText array:allData];
dispatch_sync(dispatch_get_main_queue(), ^{
searchArray = tmpArray;
[mytable reloadData];
});
});
но в этом случае все еще существуют задержки.
Обновить -1-:
Поиск Предикат занимает всего 2 мс:) после тяжелой работы:) но клавиатура все еще отстает, когда пользователь выполняет поиск, поэтому единственное, что я делаю после получения результата, - это перезагрузка таблицы "изменение в пользовательском интерфейсе", что, по-моему, делает ее отстающей,
Итак, что я ищу для разделения этой двух операций "набрав на клавиатуре и обновить интерфейс".
Обновление -2-:
@matehat qaru.site/info/539455/...
и
@TomSwift qaru.site/info/539455/...
ответы работают как шарм:)