У меня есть сетевой метод, который запрашивает данные с сервера, а затем отображает его на виде таблицы. Но проблема в том, что сервер не отвечает или загрузка занимает слишком много времени. Я хочу иметь возможность просто перезагрузить табличное представление с уже полученными данными. Я попытался использовать метод performSelector:withObject:afterDelay:
, но этот метод будет выполнять селектор, даже если загрузка завершена. Я попытался создать значение bool, чтобы определить, закончилась ли загрузка, когда вызывается селектор, но это создаст overlap, если загрузка уже завершена, а затем пользователь выполнил другое сетевое действие, которое селектор еще не вызвал, создав ложное действие из-за это перекрытие. Я хочу метод, который делает ограничение по времени, но может быть отменен, если загрузка уже завершена. Каков наилучший способ реализации этого? или есть лучший способ сделать то, что я хочу?Метод ограничения времени в объекте C
ответ
После завершения загрузки можно отменить свой вызов performSelector:withObject:afterDelay:
. Например, когда загрузка завершится, вы можете позвонить
[NSObject cancelPreviousPerformRequestsWithTarget:selector:object:]
Здесь target
есть объект, который называется performSelector:withObject:afterDelay:
на, selector
это селектор вы прошли, object
это объект, который вы прошли (или nil
).
В качестве альтернативы, если у вас есть только один performSelector, который будет работать под управлением в то время, есть более простой метод, который вы можете использовать:
[NSObject cancelPreviousPerformRequestsWithTarget:yourObject];
yourObject
, вероятно, будет в этом случае self
.
WOW спасибо, это ответ, который я искал. – samitarmum
Я рад, что это помогло :) –
Похоже, что вы ищете NSTimer
. Вы можете запустить таймер окончания, когда начнется сетевая активность, и аннулировать таймер, если работа закончится до срабатывания таймера.
Представьте это, инициируется nstimer -> начинается загрузка, а затем завершается, но таймер еще не достиг своего предела -> начинается другая загрузка -> пока загрузка происходит, предыдущий nstimer только что достиг своего предела -> перезагружает таблицу, а все данные еще не загружены, хотя это произошло всего за 1 секунду до этого. – samitarmum
Показать ваш код, пожалуйста. Ответ полностью зависит от деталей _how_ вы делаете этот запрос данных. – matt
Что касается вопроса * перекрытия *, вы можете создавать и совместно использовать NSMutableArray для каждого задания и вставлять в него любое значение (например, «@» «) в« задание закончено »или любое другое событие, которое вы хотите. NSMutableArray по умолчанию является потокобезопасным, iirc (вы должны это проверить). – user3125367
'NSMutableArray' - ** нет ** нить безопасный. – Avi