UIWebView - сбой при отключении контроллера модального представления во время выполнения запроса - PullRequest
16 голосов
/ 21 апреля 2011

Привет всем, Я представляю модальный контроллер представления и загружаю веб-страницу на этом контроллере представления в UIWebView:

- (void)viewWillAppear:(BOOL)animated
{
     self.requestObj = [NSURLRequest requestWithURL:[NSURL URLWithString:[MPServerPrefs serverPrefs].url_of_sandwich]];
     [self.helpWebView loadRequest:self.requestObj];
}

Все работает нормально, если я позволю веб-странице загрузиться, а затем отклоню представление. Если я отклоняю представление во время загрузки запроса, я получаю следующую трассировку стека:

#0  0x31a94466 in objc_msgSend
#1  0x35ebcb70 in -[UIWebView webView:identifierForInitialRequest:fromDataSource:]
#2  0x35ebc1c0 in -[UIWebViewWebViewDelegate webView:identifierForInitialRequest:fromDataSource:]
#3  0x36130d04 in __invoking___
#4  0x36130bd4 in -[NSInvocation invoke]
#5  0x36130730 in -[NSInvocation invokeWithTarget:]
#6  0x329fc2f4 in -[_WebSafeForwarder forwardInvocation:]

Я немного искал и не могу понять, что происходит. Есть идеи? Нужно ли отменить мой запрос при отклонении контроллера представления?

Большое спасибо!

Ответы [ 2 ]

42 голосов
/ 21 апреля 2011

Глупый я - вам просто нужно отменить запрос и исключить делегата!

[self.helpWebView setDelegate:nil];
[self.helpWebView stopLoading];
0 голосов
/ 21 апреля 2011

Ваш запрос выполняется в главном потоке.В результате запроса ваш пользовательский интерфейс зависает?Если вам придется дождаться завершения запроса до выполнения остальной части кода, вашему пользователю будет интересно узнать, что происходит, пока представление ожидает загрузки.Попробуйте запустить запрос в отдельном потоке.

...