2015-04-22 2 views
1

Я работаю над приложением 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 забирал слишком много времени, чтобы заблокировать все.

+0

Используете ли вы код javascript в своем веб-просмотре? Документы заявляют, что «Время выполнения JavaScript ограничено до 10 секунд для каждой точки входа верхнего уровня. Если ваш скрипт выполняется более 10 секунд, веб-просмотр прекращает выполнение сценария« –

+0

@MathiasKogler благодаря вашему ответу. Нет javascript-исполнения. И я не понимаю, как это может работать в первый раз. –

ответ

0

Выяснил проблему. [NSAttributedString alloc] initWithData забирал слишком много времени, чтобы заблокировать все.

Смежные вопросы