Translate

viernes, 20 de enero de 2012

Bases de datos SQLite con XCode


A la hora de trabajar con bases de datos en XCode podemos barajar varias alternativas.

Una de ellas podría ser utilizar las librerías propias de almacenamiento que objective-c nos ofrece.

Otra segunda opción podría ser usar directamente un sistema relacional de bases de datos como SQLite. A diferencia de los sistemas de gestión de bases de datos cliente-servidor, el motor de SQLite no es un proceso independiente con el que el programa principal se comunica. En lugar de eso, la biblioteca SQLite se enlaza con el programa pasando a ser parte integral del mismo. El programa utiliza la funcionalidad de SQLite a través de llamadas simples a subrutinas y funciones. En esta segunda opción podemos trabajar directamente sobre SQLite desde el propio código.

Una tercera forma de trabajo, y quizás la más adecuada sería el uso de Core Data sobre el propio SQLite. En este caso Core Data actúa de intermediario sobre la base de datos. De esta forma podemos realizar consultas y variaciones sin afectar a los datos hasta que se haga el proceso real de grabado.

Para trabajar con Core Data en XCode necesitamos los siguientes componentes:
·  Persistent Object Store. El sitio físico donde se guardan los datos de manera permanente.
·   Managed Object Context. Básicamente es el esquema de nuestra base de datos. Contiene los objetos (Managed Objects) que usaremos, es decir las entidades que forman nuestro esquema.
·   Persistent Store Coordinator, hace de mediador entre los dos anteriores.

Así nuestra aplicación usa el Managed Object Context para manejar los datos, los cuales se definen en el Modelo de datos que incluye las entidades, con sus correspondientes atributos así como las relaciones entre entidades.





Los pasos a seguir serían los siguientes:

1º Abrimos XCode y creamos un nuevo proyecto, asegurándonos que hemos seleccionado la casilla “Use Core Data”.






2º Creamos el schema con las entidades, atributos y relaciones necesarias.






3º Generamos una clase por cada entidad creada. Para ello seleccionamos la entidad y en el menú Editor cogemos la opción Crear NSManagedObject subclass. Esto habrá que hacerlo para todas y cada una de las entidades creadas. Cada una de estas entidades serán un Managed Object, y todos juntos son el Managed Object Context.






4º Al seleccionar Use Core Data al crear la aplicación XCode escribe todo el código necesario para inicializar el Managed Object Context, el Persistent Store Coordinator, etc.. Este código se sitúa en el fichero AppDelegate.m

El Persistent Store Coordinator inicial que se crea por defecto es del tipo XML, y se almacena en la carpeta con el mismo nombre del proyecto dentro de la carpeta Librerías del usuario en concreto. Ahí se crea un fichero XML con el nombre del proyecto y con extensión “storedata”.

Como es un fichero oculto, para poder verlo abriremos un terminal y ejecutaremos:

defaults write com.apple.finder AppleShowAllFiles TRUE

Después para que los cambios sean efectivos reiniciamos el Finder desde el propio terminal ejecutando:

killall Finder

Para restituir las carpetas ocultas a su estado original basta con repetir lo anterior pero cambiando TRUE por FALSE

Una vez reiniciado el Finder vamos a la carpeta Librería de vuestro usuario, la cual se mostrará algo transparente para indicar que es oculta. Dentro de esta habrá una carpeta con el mismo nombre del proyecto, y a su vez dentro de esta se habrá creado un fichero conla base de datos.







Si queremos usar una base de datos en SQLite tendremos que buscar en el método: persistenStoreCoordinator y cambiar el tipo de fichero y el nombre de la base en cuestión. En nuestro caso sustituiremos NSXMLSStoreType por NSSQLiteStoreType y @”usersapp.storedata” por @”usuarios.sqlite”.





Igualmente si queremos ver el contenido de datos del fichero creado podemos abrirlo usando SQLite Manager de Firefox. Para instalarlo abriremos Firefox , iremos a complementos e instalaremos el complemento SQLite Manager. Una vez instalado para usarlo abrimos Firefox y en Herramientas cogemos la opción SQLite Manager.







5º Añadimos la parte necesaria de componentes para manejar la tabla de usuarios. Para ello vamos al proyecto. Seleccionamos MainMenu.Xib y hacemos click sobre la ventana para mostrarla.






Después del Object library selecionamos un Array Controller, un Table View y tres Button. Y los configuramos como se muestra en la imagen siguiente:






9º Configuramos el Array Cotroller. Para ello seleccionamos el objeto y en el Binding Inspectors configuramos lo siguiente:






Igualmente para el Array Controler en el Attribute Inspector configuramos lo siguiente:






10º Configuramos las acciones de los botones Añade y Borra. Para ello pulsando ctrl arrastramos el botón desde cada ratón al Array Controller y en el menú que se despliega seleccionamos la acción correspondiente para cada botón:





11º Igualmente configuramos el botón Graba, pero esta vez asignaremos la pulsación del botón al método sabe que hay en AppDelegate.m. Este método se encarga de registrar los cambios sobre el Persistent Store.






12º Nos queda por conectar los campos del objeto Table View a los campos de nuestra entidad. Para ello hacemos triple click sobre uno de los campos y en el Binding Inspector configuramos lo siguiente:



¡Y ya lo tenemos funcionando! Podremos introducir datos en la tabla con el botón añade y borrarlos con el botón borrar. Para salvar los datos al Persistent Store usaremos el botón graba.