Приложение составлено из навигационных представлений. Я вызываю функцию в viewDidAppear, котораяiOS, прекратите выполнение функции при нажатии кнопки «назад»
[self extractInfoWithWebsite:[NSString stringWithFormat:@"http://www.cineklik.com/%@-%@.aspx", self.cinemaType, self.location]];
Эта функция делает HTML разбора из текущей веб-страницы в Интернете. Код очень долго делится, но идея состоит в том, что он извлекает данные с веб-сайта.
Проблема заключается в том, что если пользователь решает нажать кнопку «Назад» навигации до того, как эта информация будет загружена, страница останется прежней, и приложение перестанет функционировать (а не сбой, но станет статичным, больше ничего не делает).
Есть ли решение для этого? Спасибо заранее
EDIT:
Я изменил код к следующему: NSOperationQueue * очереди = [NSOperationQueue новый];
/* Create our NSInvocationOperation to call loadDataWithOperation, passing in nil */
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self
selector:@selector(extractInfoWithWebsite:)
object:[NSString stringWithFormat:@"http://www.cineklik.com/%@-%@.aspx", self.cinemaType, self.location]];
/* Add the operation to the queue */
[queue addOperation:operation];
[operation release];
Теперь я могу нажать на кнопку назад без замораживания, но теперь есть авария со следующей ошибкой: Пытался получить веб-замок из потока, отличного от основного потока или веб-нить. Это может быть результатом вызова UIKit из вторичного потока. Сбой сейчас ... Я думаю, это потому, что моя функция все еще работала в фоновом режиме. Как решить эту проблему?
Вы действительно хотите «отменить» запрос? // Другое решение (proces) может заключаться в том, что вы используете что-то вроде bgthread для таких «тяжелых» действий - (при использовании отдельного потока ваш основной не блокируется) – YDL
Если информация загружается , вы должны отключить взаимодействие с пользователем и при завершении включить взаимодействие с пользователем. – HarshIT
Другое решение - отменить загрузку данных при навигации назад – HarshIT