EXC_BAD_ACCESS dans UIWebView
Je viens de télécharger les rapports de plantage pour l'une de mes applications de l'iPhone à partir d'iTunes Connect. La plus courante crash a une trace comme suit:
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0xa1b1c1db
Crashed Thread: 0
Thread 0 Crashed:
0 libobjc.A.dylib 0x3030e6f4 objc_msgSend + 16
1 UIKit 0x30ebebee -[UIWebView webView:resource:didFinishLoadingFromDataSource:]
2 UIKit 0x30ebe5ca -[UIWebViewWebViewDelegate webView:resource:didFinishLoadingFromDataSource:]
3 CoreFoundation 0x32b73b5c __invoking___ + 60
4 CoreFoundation 0x32bc67be -[NSInvocation invoke]
5 WebCore 0x320baa86 HandleDelegateSource
6 CoreFoundation 0x32bb8a96 CFRunLoopRunSpecific
7 CoreFoundation 0x32bb8356 CFRunLoopRunInMode
8 GraphicsServices 0x30544cd4 GSEventRunModal
9 GraphicsServices 0x30544d80 GSEventRun
10 UIKit 0x30d2c768 -[UIApplication _run]
11 UIKit 0x30d2b46c UIApplicationMain
Je suis sur à 80% que c'est un problème interne à UIWebView et à l'extérieur de la portée de ce que je puis répondre. Quelqu'un aurait-il des suggestions sur la façon d'affiner cette question afin de vous aider à identifier si c'est un problème avec le système d'exploitation et UIWebView, ou un problème que je peux corriger et l'adresse dans mon code? Merci à l'avance.
Mise à JOUR: La UIWebView en question est dans une vue qui se libère lorsque l'utilisateur clique sur le bouton précédent de la correspondante de la manette de navigation. La solution retenue semble fournir une bonne explication pour pourquoi cette erreur se produit.
Avant la solution suggérée:
- (void)dealloc {
[webView release];
[super dealloc];
}
Après la solution suggérée:
- (void)dealloc {
webView.delegate = nil;
[webView stopLoading];
[webView release];
[super dealloc];
}
Vous devez vous connecter pour publier un commentaire.
Le scénario va quelque chose comme ceci:
UIWebView
. LeUIViewController
jeux deself
en tant que délégué3a.
UIViewController
obtient désallouéUIWebView
finit de se charger et envoie "j'ai fini" message de son délégué...Vous devez arrêter le
UIWebView
de chargement de sa page et définit son délégué à néant avant de libérer le délégué.Il est presque à 100% d'une erreur dans votre code. Des erreurs dans le SDK de l'iPhone sont assez rares et
UIWebView
a été testé assez bonne par de nombreux autres développeurs.EXC_BAD_ACCESS
se produit généralement lorsque vous essayez d'accéder à un déjà sorti de l'objet. Évidemment, si Apple code est d'essayer de faire que vous êtes celui qui a publié l'objet, à tort. Êtes-vous sûr que vous n'avez pas de-autorelease
ou-release
trop?EXC_BAD_ACCESS
et autres type de plante: developer.apple.com/library/archive/technotes/tn2151/...J'ai récemment eu un problème similaire où mes applications ont été s'écraser au hasard. S'avère que le problème a été en utilisant les "
onclick=
" dans le HTML chargé.Remplacé le
onclick
avec de simples<a href="javascript:some_script">
et le problème a disparu.Espère que cela aide d'autres personnes qui rencontrent le même problème avec
webviews
.Prendre un plus difficile de regarder à l'intérieur de la chose dans votre code qui est la mise en œuvre de la
UIWebViewDelegate
protocole. En particulier, vous voulez regarder tout ce qui est manipulationwebViewDidFinishLoad:
Vous essayez d'accéder à une variable qui est libéré. Post la source si vous le pouvez, qui va nous aider à le trouver pour vous.J'ai eu un problème similaire. J'ai été en utilisant:
La sortie de "str", a provoqué le message d'erreur "EXC_BAD_ACCESS"