2012-08-12 8 views
9

Ich versuche, einen UIWebView basierten Browser in meine iPad-Anwendung zu integrieren. Es dauert einige Zeit, was es schwer macht zu debuggen, aber die App stürzt ab, immer an der gleichen Stelle: der WebThread, auf der JavaScriptCore WTF::StringImpl::hash() Funktion. Es produziert EXC_BAD_ACCESS (SIGSEGV), KERN_INVALID_ADDRESS at 0x00000001.UIWebView iOS 5: WebKit/JavaScriptCore Absturz

Die UIWebView befindet sich in einem View-Controller, der von einem anderen View-Controller (Container) stapelartig verwaltet wird. Ich halte nur vier oder weniger dieser Browser im Speicher.

Alles über das Crash-Protokoll oder was könnte den Absturz verursachen?

Dies ist das Crash-Protokoll des Web-Thread:

Thread 2 name: WebThread 
Thread 2 Crashed: 
0 JavaScriptCore     0x32a97d46 WTF::StringImpl::hash() const + 42 
1 JavaScriptCore     0x32a97c6a WTF::HashTable<WTF::StringImpl*, WTF::StringImpl*, WTF::IdentityExtractor<WTF::StringImpl*>, WTF::StringHash, WTF::HashTraits<WTF::StringImpl*>, WTF::HashTraits<WTF::StringImpl*> >::lookupForWriting(WTF::StringImpl* const&) + 18 
2 JavaScriptCore     0x32a9b028 std::pair<WTF::HashTableIterator<WTF::StringImpl*, WTF::StringImpl*, WTF::IdentityExtractor<WTF::StringImpl*>, WTF::StringHash, WTF::HashTraits<WTF::StringImpl*>, WTF::HashTraits<WTF::StringImpl*> >, bool> WTF::HashTable<WTF::StringImpl*, WTF::StringImpl*, WTF::IdentityExtractor<WTF::StringImpl*>, WTF::StringHash, WTF::HashTraits<WTF::StringImpl*>, WTF::HashTraits<WTF::StringImpl*> >::add<WTF::StringImpl*, WTF::StringImpl*, WTF::IdentityHashTranslator<WTF::StringImpl*, WTF::StringImpl*, WTF::StringHash> >(WTF::StringImpl* const&, WTF::StringImpl* const&) + 448 
3 JavaScriptCore     0x32a9ae30 WTF::AtomicString::addSlowCase(WTF::StringImpl*) + 96 
4 WebCore       0x31bade0c WebCore::AtomicHTMLToken::initializeAttributes(WTF::Vector<WebCore::HTMLToken::Attribute, 10ul> const&) + 232 
5 WebCore       0x31b88076 WebCore::AtomicHTMLToken::AtomicHTMLToken(WebCore::HTMLToken&) + 302 
6 WebCore       0x31b87eae WebCore::HTMLTreeBuilder::constructTreeFromToken(WebCore::HTMLToken&) + 14 
7 WebCore       0x31b7d07e WebCore::HTMLDocumentParser::pumpTokenizer(WebCore::HTMLDocumentParser::SynchronousMode) + 150 
8 WebCore       0x31bee29a WebCore::HTMLDocumentParser::resumeParsingAfterScriptExecution() + 50 
9 WebCore       0x31bc87e6 WebCore::HTMLDocumentParser::notifyFinished(WebCore::CachedResource*) + 78 
10 WebCore       0x31bc7448 WebCore::CachedResource::checkNotify() + 40 
11 WebCore       0x31bc7308 WebCore::CachedScript::data(WTF::PassRefPtr<WebCore::SharedBuffer>, bool) + 84 
12 WebCore       0x31bc7240 WebCore::CachedResourceRequest::didFinishLoading(WebCore::SubresourceLoader*, double) + 120 
13 WebCore       0x31bc715e WebCore::SubresourceLoader::didFinishLoading(double) + 158 
14 WebCore       0x31bc58c2 _ZN7WebCoreL16didFinishLoadingEP16_CFURLConnectionPKv + 46 
15 CFNetwork      0x347737ee URLConnectionClient::_clientDidFinishLoading(URLConnectionClient::ClientConnectionEventQueue*) + 186 
16 CFNetwork      0x3476849e URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload(XConnectionEventInfo<XClientEvent, XClientEventParams>*, long) + 418 
17 CFNetwork      0x3476819c URLConnectionClient::processEvents() + 100 
18 CFNetwork      0x347680d2 MultiplexerSource::perform() + 150 
19 CoreFoundation     0x313d2acc __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 8 
20 CoreFoundation     0x313d2298 __CFRunLoopDoSources0 + 208 
21 CoreFoundation     0x313d103e __CFRunLoopRun + 646 
22 CoreFoundation     0x3135449e CFRunLoopRunSpecific + 294 
23 CoreFoundation     0x31354366 CFRunLoopRunInMode + 98 
24 WebCore       0x31b74c9c _ZL12RunWebThreadPv + 396 
25 libsystem_c.dylib    0x33bca72e _pthread_start + 314 
26 libsystem_c.dylib    0x33bca5e8 thread_start + 0 

Antwort

0

Da das Crash-Protokoll schon sagt, es sieht aus wie ein JavaScript-bezogenes Problem sein könnte. Ich nehme an, dass die Seite, die Sie laden, JavaScript hat? Interessanterweise läuft die Webseite in Mobile Safari gut - haben Sie Probleme in einem UIWebView?

Wenn Sie die JS nicht ändern können oder die Webseite auf anderen mobilen/Desktop-Browsern oder -Geräten gut läuft, würde ich vorschlagen, einen Fehler mit Apple zusammen mit dem JavaScript, das zur Reproduktion des Problems verwendet wurde, einzureichen.

11

Ich hatte das gleiche Problem, verbrachte den ganzen Tag ... Es gab eine Menge verschiedener WebKit Fehler wie diese. Endlich habe ich es verstanden: Das war ein Multithread-Problem! Ich habe das WebView von Thread 1 erstellt und dann versucht, seinen Inhalt mittels JS-Funktionen in Thread 2 zu ändern ...

Die einfache performSelectorOnMainThread:withObject:waitUntilDone: behob das Problem!

Vielleicht wird dies jemandem helfen.

+0

bin sehr neu zu xCode, wo diese Zeile ausgeführt oder platziert werden soll? PerformSelectorOnMainThread: withObject: waitUntilDone: ' – Khaleel

+1

@Khaleel Zuerst sollten Sie lesen, wie Multithreading zu verwenden, wie interagieren Threads. Danach wird klar, wo diese Funktion platziert werden soll. :) Oder du kannst deinen Code und den Absturzbericht in einer anderen Frage posten, wir sprechen dort. –

+0

anstatt eine Funktion aufzurufen, rufen Sie sie durch self.performSelectorOnMainThread ("YOURFUNCTIONNAME:", withObject: postString, waitUntilDone: true) –