5 / 5 / 1
Регистрация: 26.01.2014
Сообщений: 69
|
|
1 | |
Прерываем выполнение метода26.01.2014, 17:17. Показов 1836. Ответов 9
Метки нет (Все метки)
Добрый день!
Совсем недавно начал программировать на cocoa touch. До этого ни когда, ни на чем не программировал. Но вот сейчас уже имею 1 приложение опубликованное в AppStore и почти готовое обновление 1.1 для него. "Почти" это как раз по причини того что возникли сложности вот где: Имею UISearchBar. К нему метод textDidChange, в котором в dispatch_async в бэкграунде начинается загрузка из сети JSON, парсинг в NSDictionary, Из которого берем allKey в NSArray доступный глобально и в самом конце метода вызываем dispatch_async в главном потоке в котором выполняем [tableView reloadData] с данными из того самого NSArray. Проблема в том что при быстром наборе символов в UISearchBar часто в tableView отображаются данные без последнего введенного символа. В связи с этим встал вопрос: Как в самом начале метода textDidChange: остановить предидущую загрузку данных? (заранее сори если не понятно объясняю - всего 2 месяца в этой теме варюсь).
0
|
26.01.2014, 17:17 | |
Ответы с готовыми решениями:
9
Как из метода отправить переменную в другой метод и продолжить выполнение метода? Прервать выполнение метода Прервать выполнение метода Непрерывное выполнение метода |
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
|
|
27.01.2014, 10:54 | 3 |
0
|
5 / 5 / 1
Регистрация: 26.01.2014
Сообщений: 69
|
|
27.01.2014, 23:55 [ТС] | 5 |
Ну в общем решил задачу следующим способом:
В начале textDidChange поставил проверку на наличие операторов в потоке и если больше 0 то waitUntilAllOperationsAreFinished, ну и соответственно подправил часть кода под NSInvocationOperation. А cancel и cancelAllOperations по чему то не помогли. А вот подскажите пожалуйста в чем отличие dispatch_async и NSOperationQueue ну разумеется помимо того как эти методы описываются?
0
|
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
|
|
28.01.2014, 07:19 | 6 |
BigDanceMouse, странное решение - грузить заведомо ненужные данные...
0
|
5 / 5 / 1
Регистрация: 26.01.2014
Сообщений: 69
|
|
28.01.2014, 07:39 [ТС] | 7 |
Да, оно мне тоже не очень нравится но что то ни как не получается отменить методы. Попробую еще по вашей ссылке разобратся.
0
|
5 / 5 / 1
Регистрация: 26.01.2014
Сообщений: 69
|
|
15.02.2014, 23:53 [ТС] | 8 |
Если кому то пригодиться мой опыт то решил проблему вот как:
организовал загрузку через UIURLConnection в отдельном потоке через NSOperationQueue В начало метода textDidChange воткнул [connection cancel]; [queue cancelAllOperations]; та-да! Все работает так как хотелось - юзер вводит текст - если медленное соединение или быстрый юзер - текст отобразится тот, который будет последним, а если быстрое соединение или медленный юзер - текст будет обновляться после нажатия каждой кнопки.
0
|
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
|
|
16.02.2014, 08:51 | 9 |
BigDanceMouse, имеет место на жизнь, вы молодец.
0
|
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
|
|
16.02.2014, 17:31 | 10 |
советовал бы покопать в сторону ReactiveCocoa для решения подобных задач, на будущее
кстати, парень описывает аналогичную ситуацию: http://www.youtube.com/watch?v=YlsunWT87eo#t=902
0
|
16.02.2014, 17:31 | |
16.02.2014, 17:31 | |
Помогаю со студенческими работами здесь
10
Проверить выполнение метода Автоматическое выполнение метода Автоматическое выполнение метода Параллельное выполнение метода Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |