2012-08-12 14 views
9

Estoy tratando de incluir un navegador basado en UIWebView en la aplicación de mi iPad. Lleva algo de tiempo, lo que dificulta la depuración, pero la aplicación finalmente falla, siempre en el mismo lugar: el WebThread, en la función JavaScriptCore WTF::StringImpl::hash(). Produce EXC_BAD_ACCESS (SIGSEGV), KERN_INVALID_ADDRESS at 0x00000001.UIWebView iOS 5: WebKit/JavaScriptCore crash

El UIWebView se encuentra dentro de un controlador de vista administrado por otro controlador de vista (contenedor) de forma similar a una pila. Solo guardo cuatro o menos de esos navegadores en la memoria.

¿Algo sobre el registro de fallos o sobre lo que podría estar causando el bloqueo?

Este es el registro de bloqueo de la rosca 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::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 

Respuesta

0

A medida que el registro de bloqueo indica, parece que podría ser un problema relacionado con JavaScript. ¿Supongo que la página que está cargando tiene JavaScript? Por interés, la página web funciona bien en Mobile Safari. ¿Tiene problemas con UIWebView?

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

11

Tuve el mismo problema, pasé todo el día ... Hubo MUCHOS errores WebKit como estos. Finalmente, lo entendí: ¡este era un problema multihilo! Creé el WebView desde el subproceso 1, luego intenté modificar su contenido mediante funciones JS en el subproceso 2 ...

¡El performSelectorOnMainThread:withObject:waitUntilDone: simple resolvió el problema!

Quizás esto ayude a alguien.

+0

soy muy nuevo en xCode dónde ejecutar o colocar esta línea 'performSelectorOnMainThread: withObject: waitUntilDone:' – Khaleel

+1

@Khaleel En primer lugar, debe leer cómo usar multihebra, cómo interactúan los hilos. Después de eso, quedará claro dónde colocar esa función. :) O bien, puede publicar su código y el informe de fallos en otra pregunta, hablaremos allí. –

+0

en lugar de llamar a una función, llámelo a través de self.performSelectorOnMainThread ("YOURFUNCTIONNAME:", withObject: postString, waitUntilDone: true) –