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.