SQLite con UITableView (Parte II)

16 May 2008

(Los fuentes del ejemplo están disponibles en el pie del artículo).
En el artículo anterior ya dejamos preparado el fichero de recursos con nuestro Navigation Controller que se encargará de mostrarnos el navegador de vistas (en principio solo tenemos una), también creamos nuestro fichero de base de datos, y nuestra clase DataViewController que será la encargada de gestionar y mostrar dichos datos. La conexión con la base de datos se realizará en nuestra clase delegada de la aplicación.

CLASE INMUEBLE

Ahora vamos a crearnos una nueva clase (Inmueble), que nos servirá de estructura para el tratamiento de nuestros registros de la base de datos. Será una clase sencilla (NSObject) donde incluiremos como miembros de la misma los distintos campos de nuestra tabla. Estos miembros serán del mismo tipo que hayamos definido en la creación de nuestra tabla y para nuestro caso hemos creado 3 campos (dirección, teléfono y comentarios).

@interface Inmueble : NSObject

{

sqlite3 *database;

NSInteger primaryKey;

NSString *address;

NSString *phone;

NSString *comment;

}

El miembro database veremos que será utilizado para recibir la base de datos que en nuestra clase delegada de la aplicación crearemos y abriremos. Implementaremos los métodos set y get de dichos miembros para consultar y asignar valores a nuestros campos. (Lógicamente el campo primaryKey no tiene método set, ya que es el campo autonumerico identificador).

- (NSInteger)primaryKey

- (NSString *)address

- (void)setAddress:(NSString *)aString

- (NSString *)phone

- (void)setPhone:(NSString *)aString

- (NSString *)comment

- (void)setComment:(NSString *)aString

Para terminar con nuestra clase Inmueble, necesitamos un método que reciba la base de datos de la que antes hemos hablado, y realice una consulta SQL a nuestra tabla. En este método solo obtendremos el campo dirección (address) de nuestra tabla, que será el que mostremos en nuestro TableView.

- (id)initWithPrimaryKey:(NSInteger)pk database:(sqlite3 *)db

Recordemos la guía de referencia de SQLite que os dejé, pues en ella veremos el cometido de los métodos sqlite3_prepare_v2, sqlite3_bind_int y sqlite3_step que usaremos en el método initWithPrimaryKey para ir recogiendo el valor de nuestro campo address.



CLASE DATAVIEWCONTROLLER

Finalizamos la implementación de las clases de nuestro proyecto con la clase DataViewController, que será la encargada de mostrar los datos en el TableView. Lo único destacable en esta clase, además del método loadView son los método de UITableViewDataSource llamados numberOfSectionsInTableView, numberOfRowsInSection y cellForRowAtIndexPath los cuales ya explicábamos en anteriores artículos (UITableView con índices).

CLASE DELEGADA DE NUESTRA APLICACIÓN

Como punto de entrada de nuestra aplicación, nuestra clase delegada será la encargada de preparar la base de datos, rellenar los datos apoyándonos en nuestra clase Inmueble y que nuestra clase DataViewController se encargue de rellenar en la vista. Aquí volvemos a encontrarnos con las funciones de SQLite para abrir nuestra base de datos, ejecutar consultas, etc.

Aplicación de ejemplo: buscapisos.zip
SQLite con UITableView (Parte II)

Comentarios recientes

  • 31 August 2008
    Antonio dijo:

    Se aceptan las disculpas...

  • 31 August 2008
    Clapp! dijo:

    Me retracto de mi anterior comentario, solo vi el título por encima, ya veo que cambiáis bastantes cosas. Me he pasado de listo xD

  • 31 August 2008
    Clapp! dijo:

    Me gustaba mas cuando lo hacíais vosotros en lugar de <del>copiarlo</del>traducirlo de icodeblog.com

  • 29 May 2008
    gabriel dijo:

    OK gracias! la proxima va al foro.

  • 29 May 2008
    Antonio dijo:

    Hola Gabriel Me alegro de que se solucionase tu error. La forma de recuperar un campo de texto es de la siguiente manera :NSString *campo = sqlite3_column_text(consulta, nCampo) donde nCampo es la columna que queremos recuperar de nuestra consulta. Te recomiendo que consultes la web de referencia de SQLite3 que ya publicamos en nuestro anterior artículo http://www.iphonesoftware.es/sqlite-en-tu-iphone Igualmente aprovecho para invitarte a que realices consultas de este tipo en el foro ya que es la mejor manera de que todos participemos. Un saludo.

  • 29 May 2008
    gabriel dijo:

    Hola, con respecto al codigo que te pase pude solucionar el tema del error 1, era porque estaba incluyendo mal la libreria de sqlite(era un enlace o algo parecido). Queria consultarte en esta oportunidad como convertir un string obtenido por medio de sqlite_column(de un campo char de base de datos) a un NSString para ser mostrado en un label. Gracias.

  • 29 May 2008
    Antonio dijo:

    Hola Gabriel Enviamelo a antonio@iphonesoftware.es. Con respecto al error ese, intenta antes de compilar a limpiar la cache de datos del compilador, dejando pulsado el botón de build. Con respecto a tus dudas sobre los controles, te recomiendo que lo transmitas en el foro, ya que voy a utilizarlo como guia a la hora de publicar artículos. Una última cosa, sobre la diferencia entre el View y su controlador es conveniente que repases este artículo http://es.wikipedia.org/wiki/Modelo_Vista_Controlador donde lo explica muy bien. Te felicito por tu participación.

  • 29 May 2008
    gabriel dijo:

    Hola, con respecto al teclado ese metodo es el que buscaba, pero tengo problemas con el simulador y hay veces compila sin errores y la pantalla queda completamente en negro y luego me tira un cartel para ignorar o reportar(version beta 5), no entiendo a que se debe. Por otro lado hice un pequeno ejemplo que accede a una basedatos y muestra en una etiqueta el campo de un registro de la tabla, pero al compilar la aplicacion me tira error 1. Me gustaria si es posible subirte ese ejemplo para que me digas cual es error. Tambien me falta algo de concepto sobre los controles no entiendo cual es la diferencia entre un View y su controlador, a igual que el tabar y otros. Gracias.

  • 29 May 2008
    Antonio dijo:

    Gabriel, prueba esto en tu clase controladora - (BOOL)textFieldShouldReturn:(UITextField *)theTextField { // Cuando el usuario presiona Return, el teclado debe desaparecer return YES; } Si no funciona, publicaremos un artículo de forma conjunta para explicar como se hace.

  • 29 May 2008
    Gabriel dijo:

    NO me confundi. Al presionar done o return no responde, quiero que desaparezca el teclado para poder seguir trabajando en el view.

  • 29 May 2008
    Gabriel dijo:

    exactamente!

  • 28 May 2008
    Antonio dijo:

    Cuando dices retraer te refieres a la aparición del mismo para empezar a escribir?

  • 28 May 2008
    Gabriel dijo:

    Disculpa la ansiedad, tendrás algún código de fuente donde explique como retraer el teclado del textField ya que lo implemente viendo un video pero no funciono. Gracias, felicitaciones por la página esta muy buena.

  • 28 May 2008
    Antonio dijo:

    Hola Gabriel El ejemplo estaba sin terminar, ya que en esta segunda entrega tan solo pretendemos mostrar que la base de datos sea cargada en nuestro tableview. En los próximos días publicaré más artículos sobre el mismo ejemplo hasta llegar a terminarlo. Gracias.

  • 28 May 2008
    gabriel dijo:

    Hola, No me funcionan los botones y me tira una excepcion en tiempo de ejecucion.

Deja un comentario

Escrito por:

Administrador

Sin categoría
iPhoneUITableViewControllerUITableViewDataSourceSQLite

Utilizamos cookies propias y de terceros para mantener la sesión o sus preferencias, recopilar estadísticas y proporcionar contenidos conforme a sus intereses. Si continua navegando, utiliza los servicios de la web o pulsa el botón, está aceptando su instalación y el uso que hacemos de ellas. Puede obtener más información sobre como revocar su consentimiento o cómo cambiar la configuración en este enlace.