Правильная обработка [[NSURLConnection alloc] initWithRequest: ...] - PullRequest
0 голосов
/ 05 ноября 2011

Это может звучать как вопрос новичка, однако я новичок в разработке для iOS.

В навигационном контроллере выдвинуто представление, и в этом представлении при нажатии какой-либо кнопки я запускаю следующий код.

mUploadeImageConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
[request release];
if (mUploadeImageConnection) {
    mUploadImageResponseData = [[NSMutableData data] retain];
} else {
[mUploadeImageConnection release];
}

Я также реализовал следующие методы для обработки состояния соединения

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
- (void)connectionDidFinishLoading:(NSURLConnection *)connection

Когда я отправляю запрос mUploadeImageConnection, получение ответа занимает некоторое время.Но я не жду ответа и не нажимаю кнопку навигации назад, то есть я запускаю представление, но все же у меня работают четыре функции обработки соединений, хотя представление, из которого был отправлен запрос mUploadeImageConnection, выскочило,В случае didFailWithError я показываю некоторый alertView, который будет странно показывать в этом случае, т.е. показывает alertView о некотором представлении, которое уже выскочило (не видно / пользователь пришел к предыдущему представлению).

Итак, теперь мои вопросы

  • Как лучше всего справляться с подобной ситуацией?
  • Как я могу заставить свои четыре функции остановиться?

1 Ответ

1 голос
/ 05 ноября 2011

Если вы хотите остановить запрос, сохраните NSURLConnection в переменной и вызовите

[myConnection cancel];

Когда пользователь нажимает кнопку возврата.

Например, вы можете вызвать отмену в делегате вашего контроллера навигации, используя метод делегата

– navigationController:willShowViewController:animated:

проверяя, является ли viewController, который будет отображаться, вашим rootViewController.

...