#objective-c #ios #nsurlconnection
#objective-c #iOS #nsurlconnection
Вопрос:
Это может показаться вопросом новичка, однако я новичок в разработке 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, который в этом случае будет странно показывать, т. Е. Показывать alerView о каком-то представлении, которое уже появилось (не видно / пользователь перешел к предыдущему просмотру).
Итак, теперь мои вопросы
- Какова наилучшая практика для решения такого рода ситуаций?
- Как я могу заставить мои четыре функции остановиться?
Ответ №1:
Если вы хотите остановить запрос, сохраните NSURLConnection в переменной и вызовите
[myConnection cancel];
Когда пользователь нажимает кнопку «Назад».
Например, вы можете вызвать отмену в делегате вашего навигационного контроллера, используя метод делегирования
– navigationController:willShowViewController:animated:
проверяя, является ли ViewController, который будет показан, вашим RootViewController.
Комментарии:
1. Хах, спасибо, действительно простое решение, мне действительно нужно больше практики 🙂
2. Не беспокойтесь, рад помочь =) Не стесняйтесь голосовать и подтверждать мой ответ!