Я работаю над приложением iOS, чтобы пользователь мог выбрать электронное письмо из списка входящих сообщений и просмотреть его на следующей странице (для обслуживания содержимого используется UIWebView).UIWebView застрял во второй раз
Вот что я наблюдаю: в первый раз я выбираю письмо, и он появляется на второй странице довольно быстро. Однако, если я вернусь назад и снова захочу просмотреть электронную почту, потребуется очень много времени, чтобы получить webViewDidFinishLoad:
, который вызывается на второй странице.
я увидел следующее сообщение в консоли:
void SendDelegateMessage(NSInvocation *):
delegate (webView:didFinishLoadForFrame:) failed to return after waiting 10 seconds. main run loop mode: kCFRunLoopDefaultMode
Как только печатают это сообщение, содержание оказывается на WebView.
Что я не понимаю, это всегда происходит во второй раз, когда вы используете веб-просмотр для отображения содержимого HTML. Нет локального кэша для файлов/ресурсов, и нет проблем с сетью.
Пожалуйста, укажите мне, где я должен искать эту проблему. Благодаря!
---- Обновление ----
Во время моих случайных попыток, я нашел удаления этой строки:
self.webView.delegate = self;
сделает вопрос ушел. Это заставляет меня чувствовать себя еще более запутанным. Почему заставить себя быть делегатом может вызвать такую проблему?
---- ---- Дополнение 2
я нашел виновника является Flatten метод HTML я звонил после того, как WebView загружен HTML. Если удалить NSHTMLTextDocumentType это все хорошо, но я не понимаю, почему:
+ (NSString *) stripHtmlSchema: (NSString *)htmlString
{
NSString *flatString = [[[NSAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUTF8StringEncoding]
options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: [NSNumber numberWithInt:NSUTF8StringEncoding]}
documentAttributes:nil
error:nil] string];
return flatString;
}
---- Final Update ----
Разобрался вопрос. [NSAttributedString alloc] initWithData
забирал слишком много времени, чтобы заблокировать все.
Используете ли вы код javascript в своем веб-просмотре? Документы заявляют, что «Время выполнения JavaScript ограничено до 10 секунд для каждой точки входа верхнего уровня. Если ваш скрипт выполняется более 10 секунд, веб-просмотр прекращает выполнение сценария« –
@MathiasKogler благодаря вашему ответу. Нет javascript-исполнения. И я не понимаю, как это может работать в первый раз. –