`tableView: heightForHeaderInSection:` llamado delegado que no lo implementa

Terminar la aplicación debido a la exception no detectada 'NSInvalidArgumentException', motivo: '- [SomeClassNameController tableView: heightForHeaderInSection:]: selector no reconocido enviado a la instancia 0x1805f1f0'

A less que haya entendido mal la documentation, esto no debería ser posible. Si tableView:heightForHeaderInSection: no está implementado en el delegado, debería usar cualquier valor que esté almacenado en sectionHeaderHeight . Bajo ninguna circunstancia llamará a tableView:heightForHeaderInSection: a un delegado que no lo implemente.

¿Es esto correcto o no entendí mal la documentation?

EDITAR: traza de stack según lo solicitado.

 Last Exception Backtrace: 0 CoreFoundation 0x30443e83 __exceptionPreprocess + 131 1 libobjc.A.dylib 0x3aadf6c7 _objc_exception_throw + 39 2 CoreFoundation 0x304477b7 -[NSObject(NSObject) doesNotRecognizeSelector:] + 203 3 CoreFoundation 0x30445f4d ___forwarding___ + 353 4 CoreFoundation 0x30394dc8 __CF_forwarding_prep_0 + 24 5 UIKit 0x32cabfff -[UISectionRowData heightForHeaderInSection:canGuess:] + 123 6 UIKit 0x32cabf2b -[UITableViewRowData rectForHeaderInSection:heightCanBeGuessed:] + 391 7 UIKit 0x32dc83b3 -[_UITableViewUpdateSupport(Private) _setupAnimationsForExistingHeadersAndFooters] + 1603 8 UIKit 0x32dc37db -[_UITableViewUpdateSupport _setupAnimations] + 187 9 UIKit 0x32dc328b -[UITableView _updateWithItems:updateSupport:] + 1363 10 UIKit 0x32d9b397 -[UITableView _endCellAnimationsWithContext:] + 8019 11 appname 0x000704a9 -[SomeClassNameView layoutSubviews] (SomeClassNameView.m:47) 12 UIKit 0x32bc8353 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 347 13 QuartzCore 0x3284e943 -[CALayer layoutSublayers] + 143 14 QuartzCore 0x3284a167 CA::Layer::layout_if_needed(CA::Transaction*) + 351 15 QuartzCore 0x32849ff9 CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 17 16 QuartzCore 0x32849a0d CA::Context::commit_transaction(CA::Transaction*) + 229 17 QuartzCore 0x3284981f CA::Transaction::commit() + 315 18 QuartzCore 0x3284354d CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 57 19 CoreFoundation 0x3040ef69 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 21 20 CoreFoundation 0x3040c8f7 __CFRunLoopDoObservers + 287 21 CoreFoundation 0x3040cc43 __CFRunLoopRun + 739 22 CoreFoundation 0x30377471 _CFRunLoopRunSpecific + 525 23 CoreFoundation 0x30377253 _CFRunLoopRunInMode + 107 24 GraphicsServices 0x350782eb _GSEventRunModal + 139 25 UIKit 0x32c2c845 _UIApplicationMain + 1137 26 appname 0x00386767 main (main.m:32) 27 appname 0x00020e48 start + 40 

¿Alguna posibilidad de que esté utilizando el marco Apptimize para las testings A / B? Presentarlo en mi proyecto hace que provoque que las comprobaciones de respuesta del delegado UITableView dejen de funcionar y hace que el problema UITableView que está describiendo suceda. Si elimino el marco, deja de suceder.

De los documentos

 Special Considerations Prior to iOS 5.0, table views would automatically resize the heights of headers to 0 for sections where tableView:viewForHeaderInSection: returned a nil view. In iOS 5.0 and later, you must return the actual height for each section header in this method. 

¿Este cambio está causando el problema?

¿Estás creando la vista de tabla desde el código o xib? Si es xib, estoy seguro de que hay un valor pnetworkingeterminado para la altura del encabezado de la sección, pero qué pasa si lo está creando a través del código. Puede ser cuando se ejecuta en modo de compatibilidad hay algún problema con el valor pnetworkingeterminado de 'sectionHeaderHeight'.

De los documentos

 tableView:viewForHeaderInSection: ... Discussion The returned object can be a UILabel or UIImageView object, as well as a custom view. This method only works correctly when tableView:heightForHeaderInSection: is also implemented. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

Aparentemente Apple interpreta que "no funciona correctamente" ya que "puede fallar".

No soy el codificador, pero los methods de delegado se ejecutan todo el time utilizando la encoding por defecto si no hay anulación. Solo que si hay una anulación, el código en la anulación se ejecuta en lugar del valor pnetworkingeterminado.

 -(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 

En este caso, el método espera la dirección de instancia de Tableview y un NSInteger que representa la sección, un valor no válido en uno de ellos causará la exception. …

Concentraría el esfuerzo de debugging en el estado de la vista de tabla o la sección antes de que ocurra la exception …

En ese caso, codificaría el método de delegado, ponía un punto de interrupción y vería qué pasaba en él.