Three20: отменить сетевой запрос

Я использую three20 и реализую модель как в примере TTRemoteExamples. Теперь проблема в следующем: когда я нажимаю и открываю страницу, отправляется TTURLRequest, во время получения данных с удаленного компьютера я нажимаю, чтобы открыть другую страницу. Но предыдущий сетевой запрос все еще испортил мои загруженные данные. Поэтому я хочу знать, как отменить предыдущий сетевой запрос, когда я переключаюсь на другую страницу. Или когда я нажимаю кнопку, чтобы сделать новый запрос на той же странице.

Спасибо ~


person Jason Zhao    schedule 12.09.2011    source источник


Ответы (1)


Чтобы отменить TTURLRequest, сохраните ссылку на него (обычно в переменной экземпляра), а затем отправьте ему сообщение «отменить». Вот так:

[self.myRequest cancel];

Если вы не хотите, чтобы делегат получал уведомление об отмене запроса, выполните:

// I'm assuming self is the delegate here, that may not be true
[[self.myRequest delegates] removeObject:self];
[self.myRequest cancel];

Как правило, вы также захотите сделать это в своем методе освобождения контроллера представления. Если запрос продолжается после того, как viewController был освобожден, он попытается отправить ему сообщения делегата, и вы получите сбой при плохом доступе.

Что касается времени, когда вы его отмените, решать вам. Если вам нужно, чтобы он останавливался, когда пользователь покидает ваш контроллер представления, реализуйте методы viewWillDisappear: или viewDidDisappear: UIViewController (не забудьте вызвать super!).

person Jared Egan    schedule 14.09.2011
comment
Спасибо, приятель, я использую это для тренировки: [[TTURLRequestQueue mainQueue] cancelRequestsWithDelegate: self]; Но отмечу ваше, так как вы дали мне полезный момент! Спасибо! - person Jason Zhao; 20.09.2011
comment
Ах, это тоже неплохой звонок! - person Jared Egan; 22.09.2011