UIWebView crash aleatorio en : post enviado a la instancia desasignada

Estoy teniendo una UIWebView azar usando iOS8.1 y UIWebView , usando un iPhone5 . En mis testings, el locking no aparece en iOS7 .

He creado este repository github para reproducir el locking: https://github.com/crarau/WebViewCrash

Básicamente estoy agregando una UIWebView y cargando www.amazon.com

Al azar, la aplicación se bloquea en WebThread con EXC_ARM_BREAKPOINT

Después de habilitar el seguimiento de zombis en la console, aparece este post:

 [UIViewAnimationState release]: message sent to deallocated instance 0x14deff70 

Aquí, qué sucede en la carga de UIView :

 [super viewDidLoad]; NSURLRequest * urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.amazon.com"]]; self.webView.layer.cornerRadius = 0; self.webView.userInteractionEnabled = YES; self.webView.multipleTouchEnabled = YES; self.webView.backgroundColor = [UIColor clearColor]; self.webView.scrollView.scrollEnabled = NO; self.webView.scrollView.bounces = NO; [self.webView loadRequest:urlRequest]; 

La exception stacktrace:

  Exception Type: EXC_BREAKPOINT (SIGTRAP) Exception Codes: 0x0000000000000001, 0x000000000000defe Triggenetworking by Thread: 2 Thread 0 name: Dispatch queue: com.apple.main-thread Thread 0: 0 libsystem_kernel.dylib 0x2fe054f0 mach_msg_trap + 20 1 libsystem_kernel.dylib 0x2fe052e4 mach_msg + 36 2 CoreFoundation 0x21fed936 __CFRunLoopServiceMachPort + 142 3 CoreFoundation 0x21febedc __CFRunLoopRun + 1012 4 CoreFoundation 0x21f3a20c CFRunLoopRunSpecific + 472 5 CoreFoundation 0x21f3a01e CFRunLoopRunInMode + 102 6 GraphicsServices 0x293330a4 GSEventRunModal + 132 7 UIKit 0x255461cc UIApplicationMain + 1436 8 WebViewCrash 0x0002deec main (main.m:14) 9 libdyld.dylib 0x2fd52aac start + 0 Thread 1 name: Dispatch queue: com.apple.libdispatch-manager Thread 1: 0 libsystem_kernel.dylib 0x2fe052a0 kevent64 + 24 1 libdispatch.dylib 0x00162674 0x154000 + 58996 2 libdispatch.dylib 0x00157496 0x154000 + 13462 Thread 2 name: WebThread Thread 2 Crashed: 0 CoreFoundation 0x2202aea2 ___forwarding___ + 534 1 CoreFoundation 0x21f5cdf4 _CF_forwarding_prep_0 + 20 2 CoreFoundation 0x21f2ee58 CFRelease + 596 3 QuartzCore 0x24f0ba60 CA::release_objects(X::List<void const*>*) + 12 4 QuartzCore 0x24f10dc2 -[CAAnimation dealloc] + 50 5 libobjc.A.dylib 0x2f7ecd5a objc_object::sidetable_release(bool) + 162 6 libobjc.A.dylib 0x2f7ed1a4 (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 400 7 CoreFoundation 0x21fee2a4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 12 8 CoreFoundation 0x21fede1e __CFRunLoopDoTimer + 646 9 CoreFoundation 0x21fec06e __CFRunLoopRun + 1414 10 CoreFoundation 0x21f3a20c CFRunLoopRunSpecific + 472 11 CoreFoundation 0x21f3a01e CFRunLoopRunInMode + 102 12 WebCore 0x2d362ebe RunWebThread(void*) + 414 13 libsystem_pthread.dylib 0x2fe95e90 _pthread_body + 136 14 libsystem_pthread.dylib 0x2fe95e02 _pthread_start + 114 15 libsystem_pthread.dylib 0x2fe93b8c thread_start + 4 

Cualquier consejo es apreciado Gracias

Estoy experimentando el mismo problema en iOS 8 y más específicamente un iPad 3 falla mucho más seguido que otros.

Según su publicación y algunos otros que pude encontrar, parece que es un problema con UIWebView solo en iOS8, ya que funciona con iOS7.

Lo que he hecho es usar el nuevo WKWebView en iOS8, que no presenta el mismo problema, mientras continúa usando UIWebView en iOS7.

Lo mejor sería archivar un radar con Apple y cambiar a WKWebView mientras tanto.

Si no está usando animaciones, puede evitar este error deshabilitando las animaciones. Ponga esto en el método init de su controller:

 [UIView setAnimationsEnabled:NO]; 
 [super viewDidLoad]; [[MPVolumeView alloc] init]; <------ add this line, that will be ok too. NSURLRequest * urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.amazon.com"]]; self.webView.layer.cornerRadius = 0; self.webView.userInteractionEnabled = YES; self.webView.multipleTouchEnabled = YES; self.webView.backgroundColor = [UIColor clearColor]; self.webView.scrollView.scrollEnabled = NO; self.webView.scrollView.bounces = NO; [self.webView loadRequest:urlRequest]; 

Este trabajo parece arreglarlo para mi aplicación. No me siento cómodo con esto, pero actualmente es lo único que he podido resolver para deshacerse del crash.

[self.webView performSelector: @selector (loadRequest 🙂 withObject: urlRequest] afterDelay: 0.5];

O bien, si desea algo más seguro, puede usar WKWebView en iOS 8+

Como WKWebView no admite files locales, inicie un server web:

 [GCDWebServer setLogLevel:4]; webServer = [[[GCDWebServer alloc] init] retain]; [webServer addGETHandlerForBasePath:@"/" directoryPath:rootDir indexFilename:@"index.html" cacheAge:3600 allowRangeRequests:YES]; [webServer startWithPort:0 bonjourName:nil]; 

Luego, dependiendo de la versión del sistema operativo, cree su vista web:

 if (NSClassFromString(@"WKWebView")) { NSString* jScript = @""; WKUserScript* wkUScript = [[WKUserScript alloc] initWithSource:jScript injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES]; WKUserContentController* wkUController = [[WKUserContentController alloc] init]; [wkUController addUserScript:wkUScript]; WKWebViewConfiguration* wkWebConfig = [[WKWebViewConfiguration alloc] init]; wkWebConfig.userContentController = wkUController; webViewNew = [[WKWebView alloc] initWithFrame:CGRectMake(0.f, 0.f, 1.f, 1.f) configuration:wkWebConfig]; webViewNew.navigationDelegate = self; webViewNew.scrollView.bounces = NO; webViewNew.scrollView.scrollEnabled = NO; webViewNew.backgroundColor = [UIColor networkingColor]; webViewNew.opaque = YES; } else { webViewOld = [[UIWebView alloc] initWithFrame: CGRectMake (0, 0, 1.0f, 1.0f)]; webViewOld.delegate = self; [[webViewOld scrollView] setBounces: NO]; webViewOld.scrollView.scrollEnabled = NO; webViewOld.scalesPageToFit = YES; [webViewOld setBackgroundColor:[UIColor whiteColor]]; [webViewOld setOpaque:NO]; } 

Y luego busque: [NSString stringWithFormat: "htztp: //127.0.0.1:% d", (int) webServer.port] (Ignore la z en http, stackoverflow no me permitirá publicar las URL a localhost)

Resolví el problema Tuve el mismo problema al agregar una label de video (la fuente era un file mp4 local de aproximadamente 18 Mb). Podría identificar la label de video como el responsable del crash porque html sin video no falla. Luego intenté inyectar dos segundos más tarde la label de video a través de javascript y la aplicación se bloqueó. Después de algunas horas, encontré esto: UIWebView se bloquea el html5-Video EXC_BAD_ACCESS .

Mi solución fue extraer la inyección de video tag en una function javascript y llamar a esa function en webViewDidFinishLoad.

Entonces, en mi controller tengo:

 - (void)webViewDidFinishLoad:(UIWebView *)webView { [self.webView stringByEvaluatingJavaScriptFromString:@"placeVideoTag();"]; } 

Mientras que en mi index.html tengo:

 ... <div id="left"> <div id="media-div"></div> ... 

y (¡también agregué una label de audio!):

 <script> function placeVideoTag() { $('#media-div').html('<video id="videoController" width="100%" controls > <source src="video_1.mp4" type="video/mp4"></video>'); $('#media-div').append('<br/><audio id="audioController" controls="" width="100%"><source src="audio_1.mp3" type="audio/mp3"></audio>'); } </script> 

Sé que suena como una solución extraña, pero realmente funciona. Tuve el mismo problema idéntico como se indica aquí, también habilitando el seguimiento de zombies

Al azar, la aplicación se bloquea en WebThread con EXC_ARM_BREAKPOINT

Después de habilitar el seguimiento de zombis en la console, aparece este post:

[UIViewAnimationState release]: post enviado a la instancia desasignada 0x14deff70

asegúrese de configurar el delegado de UIWebView en nil en el método dealloc

 - (void)dealloc { [self.webView stopLoading]; self.webView.delegate = nil; } 

Intenta actualizar a iOS 8.4.1. Funcionó para nosotros (sin embargo, no encontramos references a este error en las notas de la versión).

Sé que estoy retrasado, pero esto podría ayudar a alguien, asegúrese de que sus puntos de vista IBOutlet son débiles. Esta respuesta me ayudó a deshacerme de este problema.