Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de...

29
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-13 Depto. Ciencia de la Computación e IA Persistencia Sesión 4: Persistencia en iOS. User Defaults y Core Data

Transcript of Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de...

Page 1: Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de la Computación e IA Persistencia Core Data: Introducción (1) • Framework para

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-13 Depto. Ciencia de la Computación e IA

Persistencia

Sesión 4: Persistencia en iOS. User Defaults y Core Data

Page 2: Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de la Computación e IA Persistencia Core Data: Introducción (1) • Framework para

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Persistencia en iOS © 2012-13 Depto. Ciencia de la Computación e IA Persistencia

Índice de contenidos

• User Defaults• Introducción• Escritura• Lectura• Preferencias de aplicación

• Core Data• Introducción• Componentes para la gestión de datos• Componentes para consultas• Migración de datos.

2

Page 3: Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de la Computación e IA Persistencia Core Data: Introducción (1) • Framework para

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Persistencia en iOS © 2012-13 Depto. Ciencia de la Computación e IA Persistencia

User Defaults• Útil para almacenar datos simples y de uso repetido.• Uso muy similar a las variables de sesión en Web.• Los datos se almacenan en la memoria del dispositivo (no en

fichero ni BD) -> Acceso a datos instantáneo (muy rápido)• Los datos se borran al borrar la aplicación (al igual que el resto

de métodos de persistencia).• Muy sencillo de programar (Key-Value)

• Ejemplos de uso:• Información de usuario: nombre de usuario.• Estado actual de la aplicación.• Puntuación almacenada en un juego.• Nivel actual en un juego.

3

Page 4: Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de la Computación e IA Persistencia Core Data: Introducción (1) • Framework para

-(IBAction) guardaDatos { NSLog(@"Guardamos los datos..."); // creamos el objeto NSUserDefaults NSUserDefaults *datos = [NSUserDefaults standardUserDefaults]; // guardamos el nombre (NSString) [datos setObject:tfNombre.text forKey:@"nombre"]; // guardamos la edad (Integer) [datos setInteger:[tfEdad.text integerValue] forKey:@"edad"]; }

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Persistencia en iOS © 2012-13 Depto. Ciencia de la Computación e IA Persistencia

User Defaults: escritura• Uso de la clase NSUserDefaults

• Escritura de datos:

4

Page 5: Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de la Computación e IA Persistencia Core Data: Introducción (1) • Framework para

NSUserDefaults *datos = [NSUserDefaults standardUserDefaults]; // obtenemos un NSString NSString *nombre = [datos stringForKey:@"nombre"]; // obtenemos un NSInteger NSInteger edad = [datos integerForKey:@"edad"]; if (nombre!=nil && edad!=0){ NSLog(@"Nombre cargado: %@, edad: %d",nombre,edad); } else { NSLog(@"Sin datos!"); }

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Persistencia en iOS © 2012-13 Depto. Ciencia de la Computación e IA Persistencia

User Defaults: lectura• Lectura de datos:

5

Page 6: Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de la Computación e IA Persistencia Core Data: Introducción (1) • Framework para

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Persistencia en iOS © 2012-13 Depto. Ciencia de la Computación e IA Persistencia

Preferencias de la aplicación• Podemos personalizar las preferencias de nuestra aplicación

mediante un fichero Settings.• Las preferencias que creemos en el fichero aparecerán dentro

de los ajustes de nuestro dispositivo.• El fichero Settings es de tipo plist en el que cada elemento es

un diccionario.• Muy útil para configurar parámetros de configuración, como por

ejemplo:• Unidades de medida (km, millas...).• Tamaño de letra de los textos.• Mostrar número de versión de la aplicación.• Mostrar información sobre el desarrollador.• Filtros para listados (por ejemplo en aplicaciones de RSS).• etc.

6

Page 7: Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de la Computación e IA Persistencia Core Data: Introducción (1) • Framework para

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Persistencia en iOS © 2012-13 Depto. Ciencia de la Computación e IA Persistencia

Pantalla de preferencias

7

Page 8: Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de la Computación e IA Persistencia Core Data: Introducción (1) • Framework para

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Persistencia en iOS © 2012-13 Depto. Ciencia de la Computación e IA Persistencia

Creando un fichero de preferencias (1)• Seleccionamos: File > New File > Settings > Settings Bundle

8

Page 9: Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de la Computación e IA Persistencia Core Data: Introducción (1) • Framework para

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Persistencia en iOS © 2012-13 Depto. Ciencia de la Computación e IA Persistencia

Creando un fichero de preferencias (2)• Fichero de tipo plist:

9

Page 10: Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de la Computación e IA Persistencia Core Data: Introducción (1) • Framework para

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Persistencia en iOS © 2012-13 Depto. Ciencia de la Computación e IA Persistencia

Creando un fichero de preferencias (3)• Valores permitidos para la propiedad Type:• PSTextFieldSpecifier: Campo de texto.• PSTitleValueSpecifier: Campo título (sólo lectura).• PSToggleSwitchSpecifier: Campo ON/OFF (booleano)• PSSliderSpecifier: Valor númerico en una escala. Tiene

máximo y mínimo.• PSMultiValueSpecifier: Listado de valores entre los que

podemos elegir.• PSGroupSpecifier: Grupo de propiedades.• PSChildPaneSpecifier: Botón que abrirá otra ventana de

propiedades (otro plist).

10

Page 11: Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de la Computación e IA Persistencia Core Data: Introducción (1) • Framework para

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Persistencia en iOS © 2012-13 Depto. Ciencia de la Computación e IA Persistencia

Lectura de valores de preferencias• Los valores de las preferencias se almacenan como

preferencias de usuario (NSUserDefaults) y podemos acceder a ellos desde cualquier parte de nuestro código:

11

NSString *textValue = [[NSUserDefaults standardUserDefaults]

stringForKey:@”clave_de_la_propiedad”];

Page 12: Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de la Computación e IA Persistencia Core Data: Introducción (1) • Framework para

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Persistencia en iOS © 2012-13 Depto. Ciencia de la Computación e IA Persistencia

Índice de contenidos

• User Defaults• Introducción• Escritura• Lectura• Preferencias de aplicación

• Core Data• Introducción• Componentes para la gestión de datos• Componentes para consultas• Migración de datos.• Magical Record

12

Page 13: Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de la Computación e IA Persistencia Core Data: Introducción (1) • Framework para

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Persistencia en iOS © 2012-13 Depto. Ciencia de la Computación e IA Persistencia

Core Data: Introducción (1)• Framework para la gestión de datos relacionales.• Disponible a partir del SDK 3.0 de iPhone.• Útil para aplicaciones con modelos de datos complejos.• Optimiza el consumo de memoria y mejora el tiempo de

respuesta con respecto a otros métodos de persistencia.• Usa una base de datos SQLite como método de

almacenamiento interno.• Básicamente, la API de Core Data permite interactuar con

SQLite (ORM):• Sin preocuparnos por las conexiones a la BD.• Sin preocuparnos por el esquema de la BD.• Sin escribir una sola línea de código para interactuar con SQLite.

13

Page 14: Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de la Computación e IA Persistencia Core Data: Introducción (1) • Framework para

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Persistencia en iOS © 2012-13 Depto. Ciencia de la Computación e IA Persistencia

Core Data: Introducción (2)• Elimina el tiempo de desarrollo innecesario de escribir

sentencias SQL complejas y la gestión de sus resultados.• Plantillas de XCode adaptadas a Core Data.• Preparado para migraciones entre versiones.• Desde iOS5: ¡nueva API para usar junto a iCloud!

14

Page 15: Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de la Computación e IA Persistencia Core Data: Introducción (1) • Framework para

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Persistencia en iOS © 2012-13 Depto. Ciencia de la Computación e IA Persistencia

Core Data: Preparando la aplicación (1)• Seleccionar opción de usar Core Data al crear un proyecto en

XCode:• Nos incluirá el Framework de Core Data.• Nos creará el código básico de acceso a datos.• Nos creará el modelo de datos: appname.xcdatamodel

• En el fichero del modelo de datos definiremos el esquema de la Base de Datos de modo visual.• En el modelo incluiremos las tablas, atributos de tabla y

relaciones.• No hace falta incluir claves primarias, ya que Core Data las

gestionará por nosotros.• A partir del modelo de datos se creará internamente el fichero

SQLite.

15

Page 16: Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de la Computación e IA Persistencia Core Data: Introducción (1) • Framework para

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Persistencia en iOS © 2012-13 Depto. Ciencia de la Computación e IA Persistencia

Core Data: Preparando la aplicación (2)• Entity o Managed Object: • Corresponde a una tabla en la

BD. • Es un objeto que contendrá

datos.

• Attributes (Atributos):• Corresponden a las columnas de

la BD.• Pueden ser datos o relaciones

entre entidades.

16

Page 17: Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de la Computación e IA Persistencia Core Data: Introducción (1) • Framework para

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Persistencia en iOS © 2012-13 Depto. Ciencia de la Computación e IA Persistencia

Core Data: Componentes (1)

17

NSManagedObject

NSManagedObjectContext

NSManagedObjectModel

NSPersistentStoreCoordinator

NSPersistentObjectStore

Page 18: Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de la Computación e IA Persistencia Core Data: Introducción (1) • Framework para

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Persistencia en iOS © 2012-13 Depto. Ciencia de la Computación e IA Persistencia

Core Data: Componentes (2)• NSManagedObject:• Es una representación de un registro de una tabla de la base de

datos.• Ej.: Tabla de personas, cada persona será un ManagedObject.• Siempre está asociado con un ManagedObjectContext.• Se pueden crear subclases del NSManagedObject o podemos

acceder a sus atributos a través de KVO (Key-Value Observing), como un NSDictionary.

• Cualquier cambio que se haga (inserción, borrado o cambio de propiedades) se mantendrá en memoria en el ManagedObject hasta que se guarde el contexto (ObjectContext).

18

Page 19: Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de la Computación e IA Persistencia Core Data: Introducción (1) • Framework para

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Persistencia en iOS © 2012-13 Depto. Ciencia de la Computación e IA Persistencia

Core Data: Componentes (3)• Opcionalmente podemos crear subclases del NSManagedObject:• Seleccionamos el esquema de datos > File > New File > “Managed Object Class”.

• Podemos modificar las clases a nuestro gusto, por ejemplo añadiendo nuevos métodos.

• Recomendado para facilitar el uso del ManagedObject en nuestro proyecto.

19

Page 20: Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de la Computación e IA Persistencia Core Data: Introducción (1) • Framework para

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Persistencia en iOS © 2012-13 Depto. Ciencia de la Computación e IA Persistencia

Core Data: Componentes (4)• NSManagedObjectContext:• El encargado de gestionar los datos de la base de datos

(ManagedObjects)Ejecuta las consultas, borrados, actualizaciones, inserciones,

etc...

20

Page 21: Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de la Computación e IA Persistencia Core Data: Introducción (1) • Framework para

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Persistencia en iOS © 2012-13 Depto. Ciencia de la Computación e IA Persistencia

Core Data: Componentes (5)• NSManagedObjectModel:• Es el modelo de datos.• Un conjunto de entidades (ManagedObject).• Permite definir relaciones entre entidades.• Se crea a través de XCode de modo visual (fichero .xcdatamodel).

21

Page 22: Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de la Computación e IA Persistencia Core Data: Introducción (1) • Framework para

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Persistencia en iOS © 2012-13 Depto. Ciencia de la Computación e IA Persistencia

Core Data: Componentes (6)• NSPersistentStoreCoordinator:• Gestiona una colección de PersistentObjectStores.• No se interactúa de forma directa.

• NSPersistentObjectStore:• Es el repositorio externo (SQLite).• No se interactúa de forma directa.

22

Page 23: Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de la Computación e IA Persistencia Core Data: Introducción (1) • Framework para

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Persistencia en iOS © 2012-13 Depto. Ciencia de la Computación e IA Persistencia

Core Data: Consultas (1)• Esquema de funcionamiento de las consultas (FetchRequest):

23

Page 24: Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de la Computación e IA Persistencia Core Data: Introducción (1) • Framework para

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Persistencia en iOS © 2012-13 Depto. Ciencia de la Computación e IA Persistencia

Core Data: Consultas (2)• NSFetchRequest:• Es una consulta de ManagedObjects sobre un ManagedObjectContext. (Equivale a una Select)

• Podemos usar predicados para hacer filtros: NSPredicate.• Podemos usar descriptores para ordenar los datos: NSSortDescriptor.

• El resultado de un FetchRequest será un array de ManagedObjects.

• NSFetchedResultsController:• Controlador que permite que la aplicación funcione de forma

semiautomática cuando hay cambios en los datos de Core Data.• Muy útil cuando trabajamos con tablas (UITableView).

24

Page 25: Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de la Computación e IA Persistencia Core Data: Introducción (1) • Framework para

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Persistencia en iOS © 2012-13 Depto. Ciencia de la Computación e IA Persistencia

Core Data: Consultas (3)• Ejemplo: Aplicación “Viajes”.

Si creamos un nuevo viaje:1) Creamos un objeto de tipo NSManagedObject y

escribimos datos en él (título del viaje, descripción, fecha, etc..).

2) Añadimos el objeto NSManagedObject a una instancia de la clase NSManagedObjectContext.

3) Ejecutamos el método “save” del NSManagedObjectContext.

4) Creamos un FetchRequest para cargar todos los viajes.

5) Ahora, automáticamente gracias a los métodos del protocolo del NSFetchedResultsController, podremos actualizar la vista con los nuevos datos.

25

Page 26: Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de la Computación e IA Persistencia Core Data: Introducción (1) • Framework para

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Persistencia en iOS © 2012-13 Depto. Ciencia de la Computación e IA Persistencia

Core Data: Migración de datos (1)• ¿Qué pasa si en un momento dado cambiamos la estructura del

modelo de datos?• ¿Cómo se migran los datos que ya estaban en la base de datos

al nuevo modelo de datos?

• Dos formas de implementar una migración de datos:• 1) Si la app está en fase de desarrollo:

Borramos la aplicación y la volvemos a ejecutar -> Se volverá a crear el modelo de base de datos.

Los datos se perderán -> No importa porque estamos en una versión de desarrollo.

26

Page 27: Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de la Computación e IA Persistencia Core Data: Introducción (1) • Framework para

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Persistencia en iOS © 2012-13 Depto. Ciencia de la Computación e IA Persistencia

Core Data: Migración de datos (2)• 2) Si la app ya está en producción:

Modo “Versioning” de XCode: Implementación sencilla para realizar la migración de datos simples (lightweigh migration).

Se complica bastante si tenemos que realizar migraciones de datos a medida -> implementación propia.

Recomendado: revisar la documentación de Apple si necesitamos implementar migraciones:

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmVersioning.html#//apple_ref/doc/uid/TP40004714-SW1

27

¡ATENCIÓN! Si realizamos algo mal podemos hacer que el usuario pierda todos los datos cuando actualice la aplicación.

Page 28: Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de la Computación e IA Persistencia Core Data: Introducción (1) • Framework para

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Persistencia en iOS © 2012-13 Depto. Ciencia de la Computación e IA Persistencia

Magical Record• Librería que encapsula todo el código de implementación de

Core Data.• Facilita enormemente el uso de Core Data en nuestras

aplicaciones.• Instalación muy sencilla.• Recomendado su uso.

• https://github.com/magicalpanda/MagicalRecord

28

Page 29: Persistencia - uaexpertojava.ua.es/dadm/restringido/persistencia/traspas/sesion04... · Ciencia de la Computación e IA Persistencia Core Data: Introducción (1) • Framework para

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Persistencia en iOS © 2012-13 Depto. Ciencia de la Computación e IA Persistencia

¿Preguntas?

29