EXC_BAD_ACCESS in UIWebView
Ich habe gerade heruntergeladen die crash reports in einem meiner iPhone apps von iTunes Connect. Die häufigste crash eine trace wie folgt:
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
Ich bin mir zu 80% sicher, dass dies ein internes Problem UIWebView und außerhalb der Umfang dessen, was ich beantworten kann. Hat jemand irgendwelche Vorschläge auf, wie zu verengen dieses Problem zu helfen, zu identifizieren, ob es ein Problem mit dem OS und UIWebView, oder ein Problem, das ich lösen kann und die Adresse in meinem code? Vielen Dank im Voraus.
UPDATE: Die UIWebView in Frage ist eine Ansicht, die veröffentlicht wird, wenn der Benutzer sich zuvor auf den zurück-button des entsprechenden Navigations-controller. Die akzeptierte Lösung scheint eine gute Erklärung, warum dieser Fehler Auftritt.
Bevor Lösungsvorschlag:
- (void)dealloc {
[webView release];
[super dealloc];
}
Nachdem Lösungsvorschlag:
- (void)dealloc {
webView.delegate = nil;
[webView stopLoading];
[webView release];
[super dealloc];
}
InformationsquelleAutor der Frage Aaron | 2009-10-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das Szenario geht ungefähr so:
UIWebView
. DieUIViewController
setztself
als Delegierter3a.
UIViewController
wird aufgehobenUIWebView
laden beendet und sendet "ich habe fertig" - Nachricht an seine Stellvertretung...Müssen Sie stoppen die
UIWebView
aus dem laden seiner Seite und setzt seine Stellvertretung zu null, bevor Sie freigeben der Delegierten.InformationsquelleAutor der Antwort Stephen Darlington
Es ist fast 100% ein Fehler in deinem code. Fehler in der iPhone SDK sind Recht selten und
UIWebView
getestet wurde sehr gut von vielen anderen Entwicklern.EXC_BAD_ACCESS
tritt in der Regel, wenn Sie versuchen, Zugriff auf ein bereits freigegebenes Objekt. Natürlich, wenn Apple den code versucht zu tun, Sie sind derjenige, der veröffentlicht hat, das Objekt zu Unrecht. Sind Sie sicher, dass Sie nicht über eine-autorelease
oder-release
zu viel?InformationsquelleAutor der Antwort Georg Schölly
Ich hatte vor kurzem ein ähnliches problem, wo meine apps Abstürzen zufällig. Stellt sich heraus, das problem war in mit "
onclick=
" in die geladene HTML.Ersetzt die
onclick
mit einfachen<a href="javascript:some_script">
und das problem ging Weg.Hoffe, dies hilft anderen Menschen, die erleben das gleiche Problem mit
webviews
.InformationsquelleAutor der Antwort Cesar Lou
Eine härtere Blick in das, was in Ihrem code, der die Umsetzung der
UIWebViewDelegate
Protokoll. Insbesondere Sie wollen schauen, was die HandhabungwebViewDidFinishLoad:
Sie versuchen, Zugriff auf eine variable, die veröffentlicht wurde. Post die volle Quelle, wenn Sie können, dass wird uns helfen, finden es für Sie.InformationsquelleAutor der Antwort slf
Ich hatte ein ähnliches problem. Ich war mit:
Dem release von "str" verursacht die Fehlermeldung "EXC_BAD_ACCESS"
InformationsquelleAutor der Antwort axe