a aplicación @UITableView bloquea la aplicación

Prefaci: Soy nuevo en iPhone SDK, Obj-C, Interface Builder y Cocoa. Probablemente estoy haciendo algo obviamente mal.

Pregunt: Tengo unUITableView que se bloquea si lo desplazo. Se desplazará un poco para revelar la celda completa de la celda inferior medio oculta, pero no cargará la siguiente. Del mismo modo, si me desplazo más allá de la parte superior para ocultar por completo la parte inferior de la celda, y se vuelven las gomas para mostrar esa celda, se bloqueará antes de mostrarla. Esto me parece extraño porque está dibujando las primeras 7 de 11 celdas correctamente. Los datos de la celda están en unaNSArray, en unUITableViewController vinculado como ambosdataSource ydelegate Para elUITableView en Interface Builder. Funciona cuando se inicializa la vista.

Estoy creando una aplicación que pensé que terminaría hace 2 días que solo calcula combinaciones y muestra una lista de ellas en lo que pensé que sería una conveniente vista de la tabla de desplazamiento. En este momento, ni siquiera calcula todo, laNSArray en elDataSource se inicializa una vez con algunas cadenas como@"Hello" y@"World".

Pasos para reproduci: Debido a que estoy usando IB, no puedo mostrarle exactamente la historia completa en código. Así que voy a describir lo que hice hasta ahora y espero que no te dé sueño.

He hecho una nueva "Aplicación de barra de pestañas" en Xcode, porque quiero 2 pestañas y no quiero una barra de navegación ni una tabla de pantalla completa. Moví laMainWindow.xiba primera pestaña de @ se ve enFirstView.xib como análogo a la @ daSecondView.xib. Esto funcionó muy bien. Modifiqué la vista para contener dosUITextFields para entradas y unaUITableView para salida. Esto funcionó pero la mesa estaba vacía. Subclase elUITableViewController donde llené unaNSArray propiedad denominadacombinations con 11 cadenas, y luego agregó

// Set up the cell...
cell.userInteractionEnabled = NO;
cell.text = [combinations objectAtIndex:indexPath.row];

donde solo había habido el comentario. En IB agregué unTable View Controller alFirstView.xib y establezca el nombre de su clase para que coincida con el nombre de esta nueva subclase, y arrastre con control elTable View en mi opinión sobre esteCombinations Table View Controller dos veces. Una vez que vincula eldataSource y una vez quedelegate. Aunque obtengo el mismo comportamiento si solo ladataSource está vinculado

Esto ejecuta y llena las filas visibles de la tabla (6.5) con los primeros 7 valores en eldataSource combinations. YOlat Desplácese 0.5 celdas hacia abajo y luego hacia arriba. Pero si desplazo más de 0.5 celdas hacia arriba o hacia abajo, la aplicación se bloqueará. La explicación en el informe dice:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '*** -[NSCFTimer tableView:cellForRowAtIndexPath:]:
unrecognized selector sent to instance 0x52ca40'

No hice unNSCFTimer ni lo vinculé a miTable View, Sospecho que lacellForRowAtIndexPath es exactamente un mensaje que debería haber ido a midataSource odelegate así que estoy confundido sobre por qué se extravió y hacia dónde terminó yendo.

Actualiza: Gracias por las respuestas y comentarios. Mi problema parece ser que laCombinationsTableViewController (subclase deUITableViewController) en realidad no se instancia ningún lugar en particular en mi código. Se crea en algún momento (cuando elFirstView.xib se carga) y aparentemente se gestiona mientras el tableView inicial se llena con 7 celdas, y luego se libera. Entonces necesito identificar dónde / cómo hacer una referencia retenida a este controlador. MiApplication Delegaterobablemente @ debería tener alguna salida que contenga este controlador que pueda vincularse como la instancia que se encuentra enxib. Sí, soy nuevo en esto. Sé que podría eliminar estos problemas evitando el IB y haciendo cosas explícitamente en el código, pero creo que quiero aprender a usar el IB de manera flexible.

Finalment: Sí, necesitaba una instancia retenida del controlador de vista de tabla. Suena elemental, pero esto no estaba claro cuando trabajaba con el IB como lo hice yo. Lea mi propia publicación para todo el proceso y corríjala.

Apart: O el depurador necesita instrucciones detalladas (se agradece cualquier enlace) o no funciona muy bien. Parece que obtengo más información más rápidamente dejando que la aplicación se bloquee y leyendo el informe que genera. Pero esto requiere una terminación tediosa, un relanzamiento y 3 clics. Tenía muchas ganas de pasar de esto a conectar las entradas, hacer el cálculo y actualizar la tabla con cada cambio. Se supone que esa es la parte difícil, no esto haciendo que un miembro del marco funcione.

Más divagaciones: Todo esto estaba en el iPhone SDK para 2.2.1. En ese momento, el iPhone OS 3.0 no beta aún no estaba disponible sin unirse al club por dinero en efectivo. Esperaba que fuera en la apertura de WWDC 2009, pero en realidad fue hoy (17 de julio de 2009) que el SDK 3.0 público gratuito estuvo disponible.

Respuestas a la pregunta(12)

Su respuesta a la pregunta