iOS 5 UIWebview Délégué: WebKit jeté une exception non interceptée dans la webView:decidePolicyForNavigationAction
Je suis en utilisant la méthode du délégué shouldStartLoadWithRequest
pour attraper le lien de clics et de gérer des cas particuliers à l'intérieur de mon app au lieu de permettre la webView
pour naviguer vers le lien. Dans ce code, je suis en tentant de pousser un nouveau ViewController
sur la pile. Immédiatement après la tentative de pousser la vue, j'ai eu un crash avec le message suivant s'affiche dans ma console:
WebKit discarded an uncaught exception in the webView:decidePolicyForNavigationAction:request:frame:decisionListener: delegate:
Mon code ressemble à ceci:
-(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;
}
J'ai aussi essayé à l'aide d'un modal au lieu de pousser une nouvelle viewController
. J'obtiens le même résultat. Est-il d'autres scénarios, je dois être la manipulation ici?
**Edit: Viens de penser à cela. Le point de vue, je suis en train de pousser en contient une autre UIWebView
. Devrais-je faire quelque chose pour la première webView
avant de faire la transition? Je viens de tester en poussant un point de vue différent du contrôleur qui ne contient pas de webView
et il a bien fonctionné.
OriginalL'auteur Mark Struzinski | 2011-10-25
Vous devez vous connecter pour publier un commentaire.
J'ai corrigé cela en veillant à ce que toutes les demandes antérieures sur la webview ont été arrêtés avant de poursuivre:
J'ai essayé de mettre le [webView stopLoading] dans le shouldStartLoadWithRequest méthode, juste avant le retour NON. Cela ne résout PAS mon problème. @Mark: petit plus ponctuellement vous s'il vous plaît nous donner plus de détails?
J'ai finalement découvert que mon problème était en fait causé par la mise à néant d'un élément de tableau, dans une portion de code appartenant à la nouvelle vue contrôleur de poussée, de sorte qu'il n'était pas un problème avec le web-vue-contrôleur lui-même.
OriginalL'auteur Mark Struzinski
Je n'ai absolument aucune idée de pourquoi j'obtiens cette erreur de Webkit, mais j'ai tracé vers le bas pour essayer d'insérer une valeur dans un dictionnaire avec un nul clé.
Où avez-vous été l'insertion d'un néant clé? dans un délégué de la méthode (si oui, lequel)?
Je ne suis pas sûr à ce sujet, comme il a été un an et demi, mais de ce que je me souvienne, il était absolument sans rapport avec dictionnaire dans une autre classe.
Ce bizarre ce bug! Dans mon cas, j'ai été prendre l'avertissement
WebKit discarded an uncaught exception in the webView:decidePolicyForNavigationAction:request:frame:decisionListener: delegate: <NSInvalidArgumentException> nil is not a valid predicate for filtering
. Après avoir vu cette réponse, j'ai réalisé que le prédicat en question n'était pas à distance liée à WebKit.OriginalL'auteur OlivaresF
De vérifier si vous annuler délégué de la propriété de UIWebView dans son contrôleur méthode dealloc (bien sûr, si ce contrôleur est webview de son délégué). Comme ceci:
À partir de l'Apple docs sur le délégué de la propriété:
Non, ce n'est pas un bon endroit. Mieux les viewWillUnload, peut-être. Sinon, le délégué ne fonctionnera pas plus longtemps quand sautant le nouveau-vue-contrôleur, le renvoyant ainsi à la web-vue-contrôleur.
Giorgio, vous devez toujours utiliser votre contrôleur de la méthode dealloc en vertu de l'ARC, vous juste ne faut pas l'appeler [super dealloc]. Comme sur viewWillUnload, cette méthode est obsolète depuis iOS6: contrôleur de racine de vues ne sont plus déchargé sur les conditions de mémoire faible.
OriginalL'auteur Igor Vasilev
Encore une autre cause de cette erreur peut être le fait que la mise en page automatique est accidentellement laissé activé dans le viewcontroller contenant la webview.
Ce qui m'est arrivé lors de tests sur iOS5.
OriginalL'auteur briomusic
La réponse suivante à une question similaire a résolu le problème pour moi:
uiwebview chargement du fichier html local - étrange Webkit erreur
OriginalL'auteur Paul Scott
J'ai eu une erreur similaire:
Le problème semble être provoqué par le code suivant:
Apparemment, le pc est en train d'être libéré lorsque la routine de sortie. J'ai changé le code pour faire un pc de propriété et WebKit cessé de se plaindre.
OriginalL'auteur JSWilson