IOS 5 UIWebview Delegate: WebKit отбросил необработанное исключение в веб-представлении: managePolicyForNavigationAction - PullRequest
8 голосов
/ 25 октября 2011

Я использую метод делегата shouldStartLoadWithRequest, чтобы отлавливать щелчки по ссылкам и обрабатывать конкретные случаи внутри моего приложения, вместо того, чтобы webView мог перейти к ссылке. В этом коде я пытаюсь вставить новый ViewController в стек. Сразу после попытки выдвинуть представление я получаю аварийное завершение со следующим сообщением в моей консоли:

WebKit discarded an uncaught exception in the webView:decidePolicyForNavigationAction:request:frame:decisionListener: delegate:

Мой код выглядит так:

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    if(decision logic){
        MyViewController *vc = [[MyViewController alloc] init];
        [self.navigationController pushViewController:vc animated:YES];
        [vc release];
        return NO;
    }

    return YES;
}

Я также пытался использовать модал вместо нажатия нового viewController. Я получаю тот же результат. Есть ли какие-либо другие сценарии, которые я должен здесь обработать?

** Редактировать: Просто подумал об этом. Представление, которое я пытаюсь выдвинуть, содержит еще один UIWebView. Должен ли я что-то делать с первым webView до перехода? Я просто тестировал нажатие другого контроллера представления, который не содержит webView, и он работал нормально.

Ответы [ 6 ]

8 голосов
/ 04 декабря 2011

Я исправил это, убедившись, что все предыдущие запросы на веб-просмотр были остановлены, прежде чем продолжить:

[webview stopLoading];
6 голосов
/ 09 января 2012

Я абсолютно не знаю, почему я получаю эту ошибку из Webkit, но я проследил ее до попытки вставить значение в словарь с нулевым ключом.

2 голосов
/ 08 августа 2012

Проверьте, не обнулили ли вы свойство делегата UIWebView в его методе освобождения контроллера (конечно, если этот контроллер является делегатом веб-просмотра).Например:

- (void) viewDidLoad
{
    webView.delegate = self;
}
- (void) dealloc
{
    webView.delegate = nil;
}

Из документов Apple на свойство делегата :

Важно.Перед выпуском экземпляра UIWebView, для которого вы установили делегат, вы должны сначала установить для его свойства делегата значение nil.Это можно сделать, например, в вашем методе dealloc.

1 голос
/ 15 июля 2013

Еще одной причиной этой ошибки может быть тот факт, что Autolayout случайно оставлен включенным в контроллере представления, содержащем веб-просмотр. Это случилось со мной во время тестирования на iOS5.

0 голосов
/ 18 июня 2014

Я получил похожую ошибку:

*** WebKit отбросил необработанное исключение в веб-представлении: managePolicyForNavigationAction: frame: SolutionListner: делегат: - [UIPopoverController dealloc] достигнут, пока всплывающее окно все еще отображается.

Эта проблема, по-видимому, вызвана следующим кодом:

UIPopoverController *pc = [[UIPopoverController alloc] initWithContentViewController:vc];
[pc presentPopoverFromRect:frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];

По-видимому, ПК освобождается при выходе из процедуры.Я изменил код, чтобы сделать pc свойством, и WebKit перестал жаловаться.

0 голосов
/ 24 сентября 2013

Следующий ответ на подобный вопрос решил проблему для меня:
uiwebview загрузка локального html-файла - странная ошибка Webkit

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...