UIWebView iOS 5: crash de WebKit / JavaScriptCore

Estoy tratando de include un browser basado en UIWebView en mi aplicación iPad. Lleva algo de time, lo que dificulta la debugging, pero la aplicación finalmente falla, siempre en el mismo lugar: WebThread, en la function JavaScriptCore WTF::StringImpl::hash() . Produce EXC_BAD_ACCESS (SIGSEGV), KERN_INVALID_ADDRESS at 0x00000001 .

UIWebView encuentra dentro de un controller de vista gestionado por otro controller de vista (contenedor) en forma de stack. Solo tengo cuatro o less de esos browseres en la memory.

¿Algo sobre el logging de lockings, o sobre qué podría estar causando el locking?

Este es el logging de locking del hilo web:

 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::ShanetworkingBuffer>, 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 

Tuve el mismo problema, pasé todo el día … Hubo muchos errores de WebKit como estos. Finalmente, lo entendí: ¡este fue un problema de varios subprocesss! Creé el WebView del subprocess 1, luego traté de modificar su contenido mediante funciones JS en el subprocess 2 …

El simple performSelectorOnMainThread:withObject:waitUntilDone: solucionó el problema!

Tal vez esto ayude a alguien.

Como sugiere el logging de locking, parece que podría ser un problema relacionado con JavaScript. Supongo que la página que estás cargando tiene JavaScript? Sin interés, ¿la página web funciona bien en Mobile Safari? ¿Es solo en una UIWebView que tienes problemas?

Si no puede modificar el JS, o la página web parece funcionar bien en otros browseres o dispositivos de dispositivos mobilees, sugiero que presente un error con Apple junto con el JavaScript utilizado para reproducir el problema.