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

Objective-C

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

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

26.01.2014, 17:17. Просмотров 906. Ответов 9
Метки нет (Все метки)

Добрый день!
Совсем недавно начал программировать на cocoa touch. До этого ни когда, ни на чем не программировал. Но вот сейчас уже имею 1 приложение опубликованное в AppStore и почти готовое обновление 1.1 для него. "Почти" это как раз по причини того что возникли сложности вот где:

Имею UISearchBar. К нему метод textDidChange,
в котором в dispatch_async в бэкграунде начинается загрузка из сети JSON,
парсинг в NSDictionary,
Из которого берем allKey в NSArray доступный глобально
и в самом конце метода вызываем dispatch_async в главном потоке в котором выполняем [tableView reloadData] с данными из того самого NSArray.
Проблема в том что при быстром наборе символов в UISearchBar часто в tableView отображаются данные без последнего введенного символа. В связи с этим встал вопрос:
Как в самом начале метода textDidChange: остановить предидущую загрузку данных?

(заранее сори если не понятно объясняю - всего 2 месяца в этой теме варюсь).
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.01.2014, 17:17     Прерываем выполнение метода
Посмотрите здесь:

Выполнение if...else - Objective-C
Доброго дня, есть вот такой код, но не срабатывает else ? я не пойму почему :( NSString *string =@"asdasda vk.com aksdjlaksd...

Переменные внутри метода - Objective-C
Заметил такую вещь, что внутри метода создают временную переменную и присваивают ей значение уже существующей переменной, например есть...

Вызов метода Obj-C - Objective-C
.h файл + (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize; .m файл + (UIImage...

Выполнение действий на web странице - Objective-C
Всем привет. Я может быть в очередной раз с глупым вопросом, но когда я их тут задаю, вы помогаете мне разобраться :) Я только учу...

Переопределение метода в сабклассе делегата - Objective-C
Сабж. Есть класс1, реализует некий метод некого протокола. Как в классе 2(наследник класса1) переопределить этот метод (не считая категории...

Вызов метода с возвратом значения - Objective-C
Есть метод: +(NSString*)outputString:(NSString*)inputString { //Какой-то код } Как его вызвать?

Переопределение метода только в iOS >= 7.0 - Objective-C
Такое возможно ? К примеру у меня есть класс, в нем метод - (void)drawRect:(CGRect)rect { .... } В iOS < 7.0 он вообще...

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

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

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

та-да! Все работает так как хотелось - юзер вводит текст - если медленное соединение или быстрый юзер - текст отобразится тот, который будет последним, а если быстрое соединение или медленный юзер - текст будет обновляться после нажатия каждой кнопки.
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
16.02.2014, 08:51     Прерываем выполнение метода #9
BigDanceMouse, имеет место на жизнь, вы молодец.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2014, 17:31     Прерываем выполнение метода
Еще ссылки по теме:

Вызов метода из другого класса - Objective-C
Как вызвать метод описанный в другом классе?

Запуск метода с параметрами в новом потоке - Objective-C
Стандартная ситуация, есть формочка, нажимаем кнопку, запускается сложная операция, форма подвисает, решение - вывести этот процесс в...

Как дождаться вызова метода connectionDidFinishLoading? - Objective-C
здравствуйте! недавно начал разбираться со взаимодействием ios с веб-сервисом. вобщем есть у меня синглтон класс - слой между...

Как из одного метода обратиться к переменной другого? - Objective-C
Как в методе print вывести переменную f из метода SetC? -(void) setC: (float) f{ celc=(f-32)/1.8f; } -(void) print { ...

Вызов метода базового класса, если он был переопределён в наследнике - Objective-C
Здравствуйте! Подскажите, пожалуйста, как вызвать метод базового класса из объекта наследника, который уже переопределил метод базового...


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

Или воспользуйтесь поиском по форуму:
Vorona
Peace 2 all shining faces
667 / 529 / 45
Регистрация: 05.03.2010
Сообщений: 1,273
16.02.2014, 17:31     Прерываем выполнение метода #10
советовал бы покопать в сторону ReactiveCocoa для решения подобных задач, на будущее
кстати, парень описывает аналогичную ситуацию: http://www.youtube.com/watch?v=YlsunWT87eo#t=902
Yandex
Объявления
16.02.2014, 17:31     Прерываем выполнение метода
Ответ Создать тему
Опции темы

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