Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Objective-C

Войти
Регистрация
Восстановить пароль
 
BigDanceMouse
5 / 5 / 1
Регистрация: 26.01.2014
Сообщений: 69
#1

Прерываем выполнение метода - Objective-C

26.01.2014, 17:17. Просмотров 945. Ответов 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
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.01.2014, 17:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Прерываем выполнение метода (Objective-C):

Автоматическое выполнение метода - JavaScript
var password = { pass: '', hard: '1', // Сложность пароля length: '6', // Длина пароля avalaibleValues: { nums: , ...

Прервать выполнение метода - Java SE
Есть метод выполняющий рекурсивный поиск файлов в директории. Если один такой файл найден надо прервать выполнение метода. Возможно ли это?

Проверить выполнение метода - C#
Есть такой метод: public static Boolean sendSMS(String to, String text) В его теле, как вы уже поняли, реализована отправка смс....

Прервать выполнение метода - C#
Как прервать выполнение метода, если нет доступа к исходникам метода. Метод выполняется 1 мин, нужно его прервать через 30 сек. Прерывание...

Автоматическое выполнение метода - C#
При инжекте dll в процесс должен выполнятся метод в этой dll. Где-то слышал, что такое возможно. Буду рад любой помощи

Непрерывное выполнение метода - C#
Есть метод, который считывает данные с определенных юрлов. Но данные по этим адресам постоянно меняются, чтобы отследить изменения, надо по...

9
Dan_banan_
11 / 11 / 1
Регистрация: 03.03.2013
Сообщений: 87
Записей в блоге: 1
27.01.2014, 10:11 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
тогда надо использовать не dispatch_async а NSOperationQueue, там есть методы stopAllOperations или как то так
0
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
27.01.2014, 10:54 #3
Покопайпе данный код. Там то, что вам нужно.
0
Dan_banan_
11 / 11 / 1
Регистрация: 03.03.2013
Сообщений: 87
Записей в блоге: 1
27.01.2014, 11:20 #4
ох извращения какие))
0
BigDanceMouse
5 / 5 / 1
Регистрация: 26.01.2014
Сообщений: 69
27.01.2014, 23:55  [ТС] #5
Ну в общем решил задачу следующим способом:
В начале textDidChange поставил проверку на наличие операторов в потоке и если больше 0 то waitUntilAllOperationsAreFinished, ну и соответственно подправил часть кода под NSInvocationOperation. А cancel и cancelAllOperations по чему то не помогли.

А вот подскажите пожалуйста в чем отличие dispatch_async и NSOperationQueue ну разумеется помимо того как эти методы описываются?
0
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
28.01.2014, 07:19 #6
BigDanceMouse, странное решение - грузить заведомо ненужные данные...
0
BigDanceMouse
5 / 5 / 1
Регистрация: 26.01.2014
Сообщений: 69
28.01.2014, 07:39  [ТС] #7
Да, оно мне тоже не очень нравится но что то ни как не получается отменить методы. Попробую еще по вашей ссылке разобратся.
0
BigDanceMouse
5 / 5 / 1
Регистрация: 26.01.2014
Сообщений: 69
15.02.2014, 23:53  [ТС] #8
Если кому то пригодиться мой опыт то решил проблему вот как:

организовал загрузку через UIURLConnection в отдельном потоке через NSOperationQueue
В начало метода textDidChange воткнул [connection cancel]; [queue cancelAllOperations];

та-да! Все работает так как хотелось - юзер вводит текст - если медленное соединение или быстрый юзер - текст отобразится тот, который будет последним, а если быстрое соединение или медленный юзер - текст будет обновляться после нажатия каждой кнопки.
0
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
16.02.2014, 08:51 #9
BigDanceMouse, имеет место на жизнь, вы молодец.
0
Vorona
Peace 2 all shining faces
668 / 530 / 45
Регистрация: 05.03.2010
Сообщений: 1,283
16.02.2014, 17:31 #10
советовал бы покопать в сторону ReactiveCocoa для решения подобных задач, на будущее
кстати, парень описывает аналогичную ситуацию: http://www.youtube.com/watch?v=YlsunWT87eo#t=902
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2014, 17:31
Привет! Вот еще темы с ответами:

Выполнение метода другой формы - C#
Всем здрасти! Подскажите, пожалуйста, как сделать так, чтобы при клике на "ок" с одного окна(логин, пароль), выполнялся необходимый метод...

Выполнение метода в отдельном потоке - C++ Builder
Всем привет. Я вообщем то пользуюсь RAD Studio XE но смысл тот же самый Вообщем есть программка с датамодулем. В нем есть кверя...

Выполнение метода в отдельном потоке - C#
Добрый %s! Возникла проблема следующего характера: Необходимо выполнять метод в отдельном потоке, дабы форма не тормозила. Метод...

Разное выполнение метода Invalidate() - .NET
Объясните кто-нибудь почему у меня на разных компьютерах метод Invalidate() выполняется по-разному. В одном случае перерисовывает форму, в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Yandex
Объявления
16.02.2014, 17:31
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru