2009-02-15 12 views
7

Creo que me falta algo simple, pero no puedo entender exactamente qué es.Iphone: TabView + TableView

Estoy tratando de configurar una aplicación con un UITabViewController, y una de las pestañas tendrá una UITableView y UISearchBar (pero no un controlador de navegación). Configuré el UITabViewController con todas las pestañas en el constructor de interfaz, y las vistas están en sus propios archivos xib. El archivo xib para la pestaña con el UITableView está configurado y conectado de la siguiente manera.

cosas en el navegador: propietario de archivo (Clase es mi clase personalizada que es un hijo de UITableViewController) Ver -> Vista

View (class UIView, reference view -> File's owner) contains: 
     UITableView (if i try and set references to the data source/delegate, the app breaks) 
     UISearchBar (unconfigured at the moment) 

Esta configuración muestra todos los elementos y no se bloquea, pero No puedo asignar un DataSource sin que se cuelgue cuando intento cargar la pestaña con UITableView. ¿Qué debo hacer para obtener datos en esta tabla, ya sea en IB o en código? Mis ideas son las siguientes:

  1. Implemente clases personalizables de UITableView, conéctese a la vista de tabla en IB o al TableViewcontroller personalizado en Xcode.
  2. Golpee la cabeza o la computadora portátil contra la pared hasta que funcione.

Actualización: Aquí está el error del simulador empuja a la consola cuando conecto fuente de datos y delegado del TableView a Archivo propietario (que es la clase está mi tableviewcontroller personalizado).

2/14/09 6:59:12 PM TabBarWillbeRight [33172] * Terminación de aplicación debido a excepción no detectada 'NSInvalidArgumentException', razón: '* - [UIViewController tableView: numberOfRowsInSection:]: Selector no reconocido envió por ejemplo 0x523760

Respuesta

1

Si no puede asignar el DataSource sin que se cuelgue, eso sugiere que algunos de los métodos delegados de DataSource no se han implementado.

En particular, la clase va a asignar como fuente de datos debe implementar UITableViewDataSource

+0

he implementado numberOfSectionsInTableView, numberOfRowsInSection y cellForRowAtIndexPath, y todos ellos de retorno 1, 1, y una célula con static cell.text. ¿Extrañé un método? –

+0

No debería ser eso. Aunque para ser precisos, es tableView: numberOfRowsInSection y tableView: cellForRowAtIndexPath –

+0

a la derecha, así es como están configurados, así que cuál debería ser exactamente mi fuente de datos/delegado ... he intentado configurarlo con setDataSource: y setDelegate también . Tal vez me falta algo de configuración en AppDelegate.m? –

0

¿Seguro de su clase implementa clases UITableViewDelegate y UITableViewDataSource? También verifique la declaración de su viewcontroller. Su archivo .h debe ser algo como esto

@interface MyClass:UIViewController <UITableViewDelegate,UITableViewDataSource> 

Todo lo demás parece estar en su lugar. Si la declaración de clase no especifica que implementa UITableViewDelegate y DataSource, obtendrá la excepción tan pronto como configure el origen de datos.

+0

hmmm - parece que podría ser. Desde entonces, abandoné el constructor de interfaces y creé todos los métodos relevantes programáticamente. La moraleja de la historia: las cajas negras no son divertidas. –

+0

Incluso si no utiliza IB, asegúrese de que la declaración de clase menciona que la clase implementa UITableViewDelegate y UITableViewDataSource. – lostInTransit

24

Tuve un problema similar con el mismo mensaje de error. La solución simple fue hacer clic en la Vista en el TabBarController (El rectángulo gris que dice "vista cargada desde ...") en IB y cambiar la clase del elemento por el nombre de clase de mi TableViewController.

+1

¡Justo en el momento! ¡Gracias! –

+0

Funcionó para mí también. ¡Gracias! – lguy

+0

Funciona para mí, increíble !!!! : D – tarnfeld

2

Tuve el mismo problema. 1. Asegúrese de que su Vista implemente los métodos del origen de datos 2. En IB, configure Identidad de clase para su vista a la clase que implementa los métodos del origen de datos. 3.Haga clic derecho en la vista en IB y comprobar el origen de datos está conectada a Archivos propietario, no Ver Hooking up TableView in IB

Cuestiones relacionadas