UIWebView como vista de pie de página en la sección de tableview. Strange Crash: logging de lockings adjunto

Tengo un controller de vista adecuado y estoy cargando una vista de usuario como viewForFooterInSection para la vista de tabla

Esta vista web tiene contenido html que se está cargando. La aplicación se bloquea cada vez que trato de hacer

[self.tableView beginUpdates]; [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationTop]; [self.tableView endUpdates]; 

Registro de locking adjunto

 Incident Identifier: DA08DEDA-3566-4A56-938A-57F4BCDF64F1 CrashReporter Key: ef8a5122f6b5431e4b29802596ec279644f97bd4 Hardware Model: iPod4,1 Process: sample [955] Path: /var/mobile/Applications/A0B6D2C6-AA93-4D24-9C7F-666B8C7F94B4/sample.app/sample Identifier: sample Version: ??? (???) Code Type: ARM (Native) Parent Process: launchd [1] Date/Time: 2012-07-24 13:07:10.396 +0530 OS Version: iPhone OS 4.3.5 (8L1) Report Version: 104 Exception Type: EXC_BAD_ACCESS (SIGBUS) Exception Codes: KERN_PROTECTION_FAILURE at 0x0000000c Crashed Thread: 0 Thread 0 name: Dispatch queue: com.apple.main-thread Thread 0 Crashed: 0 WebCore 0x35fbc900 WebCore::TileCache::doLayoutTiles() + 24 1 WebCore 0x3609bed8 -[TileHostLayer renderInContext:] + 28 2 QuartzCore 0x336cc948 -[CALayer _renderSublayersInContext:] + 220 3 QuartzCore 0x336cbada -[CALayer renderInContext:] + 1086 4 QuartzCore 0x336cc948 -[CALayer _renderSublayersInContext:] + 220 5 QuartzCore 0x336cbada -[CALayer renderInContext:] + 1086 6 QuartzCore 0x336cc948 -[CALayer _renderSublayersInContext:] + 220 7 QuartzCore 0x336cbada -[CALayer renderInContext:] + 1086 8 QuartzCore 0x336cc948 -[CALayer _renderSublayersInContext:] + 220 9 QuartzCore 0x336cbada -[CALayer renderInContext:] + 1086 10 QuartzCore 0x336cc948 -[CALayer _renderSublayersInContext:] + 220 11 QuartzCore 0x336cbada -[CALayer renderInContext:] + 1086 12 UIKit 0x35b6b2dc -[_UITableViewUpdateSupport(Private) _imageViewForView:] + 68 13 UIKit 0x35b6a66a -[_UITableViewUpdateSupport(Private) _setupDeleteAnimationForFooterInSection:withTargetRect:forUpdateItem:] + 370 14 UIKit 0x35a7f91a -[_UITableViewUpdateSupport(Private) _setupAnimationsForDeletedHeadersAndFooters] + 1862 15 UIKit 0x35a78be6 -[_UITableViewUpdateSupport initWithTableView:updateItems:oldRowData:newRowData:oldRowRange:newRowRange:context:] + 398 16 UIKit 0x35a77dba -[UITableView(_UITableViewPrivate) _updateWithItems:withOldRowData:oldRowRange:newRowRange:context:] + 966 17 UIKit 0x35a7746c -[UITableView(_UITableViewPrivate) _endCellAnimationsWithContext:] + 4744 18 UIKit 0x35a812f2 -[UITableView endUpdatesWithContext:] + 22 19 UIKit 0x35a812ce -[UITableView endUpdates] + 10 20 sample 0x00007574 -[TableViewController tableView:didSelectRowAtIndexPath:] (TableViewController.m:188) 21 UIKit 0x3599c514 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 656 22 UIKit 0x35a000e4 -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 124 23 Foundation 0x307ee6ce __NSFireDelayedPerform + 362 24 CoreFoundation 0x34e69a40 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 8 25 CoreFoundation 0x34e6bec4 __CFRunLoopDoTimer + 844 26 CoreFoundation 0x34e6c83e __CFRunLoopRun + 1082 27 CoreFoundation 0x34dfcebc CFRunLoopRunSpecific + 224 28 CoreFoundation 0x34dfcdc4 CFRunLoopRunInMode + 52 29 GraphicsServices 0x30de0418 GSEventRunModal + 108 30 GraphicsServices 0x30de04c4 GSEventRun + 56 31 UIKit 0x35976d62 -[UIApplication _run] + 398 32 UIKit 0x35974800 UIApplicationMain + 664 33 sample 0x000024ac main (main.m:16) 34 sample 0x00002440 start + 32 Thread 1 name: Dispatch queue: com.apple.libdispatch-manager Thread 1: 0 libsystem_kernel.dylib 0x36906fbc kevent + 24 1 libdispatch.dylib 0x36aa5032 _dispatch_mgr_invoke + 706 2 libdispatch.dylib 0x36aa603a _dispatch_queue_invoke + 86 3 libdispatch.dylib 0x36aa55ea _dispatch_worker_thread2 + 186 4 libsystem_c.dylib 0x3663558a _pthread_wqthread + 258 5 libsystem_c.dylib 0x36635bbc start_wqthread + 0 Thread 2 name: WebThread Thread 2: 0 libsystem_kernel.dylib 0x36903c00 mach_msg_trap + 20 1 libsystem_kernel.dylib 0x36903758 mach_msg + 44 2 CoreFoundation 0x34e6a2b8 __CFRunLoopServiceMachPort + 88 3 CoreFoundation 0x34e6c562 __CFRunLoopRun + 350 4 CoreFoundation 0x34dfcebc CFRunLoopRunSpecific + 224 5 CoreFoundation 0x34dfcdc4 CFRunLoopRunInMode + 52 6 WebCore 0x35f1a27e _ZL12RunWebThreadPv + 382 7 libsystem_c.dylib 0x3663430a _pthread_start + 242 8 libsystem_c.dylib 0x36635bb4 thread_start + 0 Thread 3: 0 libsystem_kernel.dylib 0x36903c00 mach_msg_trap + 20 1 libsystem_kernel.dylib 0x36903758 mach_msg + 44 2 CoreFoundation 0x34e6a2b8 __CFRunLoopServiceMachPort + 88 3 CoreFoundation 0x34e6c562 __CFRunLoopRun + 350 4 CoreFoundation 0x34dfcebc CFRunLoopRunSpecific + 224 5 CoreFoundation 0x34dfcdc4 CFRunLoopRunInMode + 52 6 Foundation 0x307937f6 +[NSURLConnection(NSURLConnectionReallyInternal) _resourceLoadLoop:] + 206 7 Foundation 0x30786382 -[NSThread main] + 38 8 Foundation 0x307f85c6 __NSThread__main__ + 966 9 libsystem_c.dylib 0x3663430a _pthread_start + 242 10 libsystem_c.dylib 0x36635bb4 thread_start + 0 Thread 4 name: com.apple.CFSocket.private Thread 4: 0 libsystem_kernel.dylib 0x36905c60 __select + 20 1 CoreFoundation 0x34e6f8f2 __CFSocketManager + 582 2 libsystem_c.dylib 0x3663430a _pthread_start + 242 3 libsystem_c.dylib 0x36635bb4 thread_start + 0 Thread 5: 0 libsystem_kernel.dylib 0x369063ec __workq_kernreturn + 8 1 libsystem_c.dylib 0x366356d8 _pthread_wqthread + 592 2 libsystem_c.dylib 0x36635bbc start_wqthread + 0 Thread 0 crashed with ARM Thread State: r0: 0x00000000 r1: 0x3ef7c298 r2: 0x00562ab2 r3: 0x00000000 r4: 0x001f8c70 r5: 0x00164f80 r6: 0x2fdfd718 r7: 0x2fdfd68c r8: 0x2fdfd6e8 r9: 0x001fc0a0 r10: 0x001f8c70 r11: 0x00164f80 ip: 0x3f05e428 sp: 0x2fdfd5f4 lr: 0x3609bedf pc: 0x35fbc900 cpsr: 0x60000030 

ACTUALIZACIÓN 1:

He cavado más profundo en esto y parece ser un error con la manzana a less que haya extrañado algo obvio

Intenté crear una nueva aplicación iphone de Master Detail y agregué una propiedad UIWebView en MasterViewController (UITableViewController) y la inicialicé

 @interface MasterViewController () { NSMutableArray *_objects; } @property(nonatomic, strong) UIWebView *webView; @end @implementation MasterViewController @synthesize detailViewController = _detailViewController; @synthesize webView; - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { self.title = NSLocalizedString(@"Master", @"Master"); webView = [[UIWebView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 50.0)]; } return self; } 

ahora he configurado esta vista web como la vista del pie de página para la sección en la vista de tabla

 - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { return webView; } - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { return 50.0; } 

y en el método didSelectRowAtIndexPath he hecho lo siguiente

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [self.tableView beginUpdates]; [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationTop]; [self.tableView endUpdates]; } 

Ahora cada vez que toco una fila, tengo el mismo locking y no tengo idea de por qué sucede esto.

Esta es una aplicación totalmente nueva con un código pnetworkingeterminado. Solo he agregado el webView como el pie de página para la vista de tabla.

Esto es bastante desconcertante. ¿Intentarías eliminar los comienzos / endUpdates:

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationTop]; } 

Veo que el locking está sucediendo en endUpdates , por lo que todo el rest que se ha ejecutado hasta ese momento ha ido impecablemente.

Otra cosa que podría intentar es volver a cargar toda la tabla llamando a reloadData lugar de solo recargar las secciones a través de reloadSections . Esto no está optimizado, pero dado que tiene pocas filas, no debería importar realmente (si funciona mejor) …

ANTIGUA RESPUESTA:

Parece que uno de los objects en la vista de la tabla se está desasignando y luego se vuelve a acceder. Este es un problema típico de "zombis".

Puede get algunas pistas sobre lo que está sucediendo habilitando la detección de zombis en Xcode.

Aquí puedes descubrir cómo habilitar zombis .

Si lo hace, el post de error que obtiene en el logging de la console ofrecerá más información sobre qué object fue desasignado prematuramente.

Entiendo que está adjuntando un logging de locking porque el locking ocurre en el campo. En este caso, tiene dos opciones: reproducir el problema a su lado (y arreglarlo con la ayuda de la detección de zombis); o inspeccione cuidadosamente su gestión de memory para descubrir cualquier problema con los objects que se muestran en la vista de tabla.