Estructura de Datos Unidad 1 Tipo abstracto de datos TAD
Ios.s9
1. 9 - PERSISTENCIA Y
COREDATA
Curso de desarrollo de aplicaciones móviles para iPhone y iPad
endika.gutierrez@urbegi.com
alex.rayon@urbegi.com
Urbegi Learning
Contents
3. CONTENIDO
• Introducción
• User Defaults
• Core Data
4. INTRODUCCIÓN
• En la aplicaciones complejas se hace crítico la persistencia de
la infromación
• Existen diversas formas de afrontar esta cuestión
• La más sencilla es el almacenaje simple en el sistema de
ficheros
5. INTRODUCCIÓN 2
• Existentécnicas cada vez más refinadas para la persistencia de
la información
• Ficheros
XML, Listas clave-valor, Bases de Datos SQL,
NoSQL, ORM...
6. INTRODUCCIÓN 3
• iOS provee de varias maneras de gestionar la persistencia
• En Ficheros dentro del sistema de ficheros
• En Listas clave-valor
• En Ficheros XML
• En Bases de Datos SQLite
7. INTRODUCCIÓN 4
• Parael almacenaje de ficheros iOS proporciona un directorio
exclusivo para cada aplicación que es almacenado dentro del
bundle de la app
• Dentro de ese directorio podremos escribir cuanto queramos
• Fuera del directorio la escriturá esta prohibida
• El directorio se borrará al borrar la aplicación
8. INTRODUCCIÓN 5
• Laescritura de ficheros dentro del sistema es igual a la de
cualquier sistema UNIX
• Objective-C Nos proporciona diversas herramientas para
integrar la escritura dentro de su API
9. INTRODUCCIÓN 6
• Un ejemplo de la lectura de un fichero podría ser
// Obtenemos el listados de directorios
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
// El primero será el empleado
NSString *documentsDirectory = [paths objectAtIndex:0];
// Construimos la ruta
NSString *fileName = [NSString stringWithFormat:@"%@/textfile.txt",
documentsDirectory];
// Leemos el fichero
NSString *content = [[NSString alloc] initWithContentsOfFile:fileName
usedEncoding:NSUTF8StringEncoding
error:nil];
11. USER DEFAULTS
• Userdefaults es una clase que nos permite almacenar datos
con clave-valor
• Esun sistema de almacenamiento sencillo pensando
originalmente para almacenar la preferencias de usuario
• Los datos se vuelcan a un XML de tipo Property List
• Deja de ser eficiente para grandes cantidades de datos
12. USER DEFAULTS 2
• Asocia valores a claves
• Las claves han de ser Strings
• Losvalores pueden ser tipos sencillos: NSNumber,
NSString, NSDate
•Ó tipos complejos complejos como NSArray ó
NSDictionary
• Siempreque se cumpla que los elementos de estos
sean de estos mismos tipos
13. USER DEFAULTS 3
• Su utilización es sencilla
• Similar a como funciona un diccionario pero siendo de la clase
NSUserDefaults
• Existe
uno por defecto y podemos crear tantos como
queramos para cada usuario
14. USER DEFAULTS 4
• Un ejemplo de almacenaje de información
// Obtenemos el UserDefaults
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
// Almacenamos un objeto genérico
[defaults setValue:resp forKey:@"Objeto"];
// Almacenamos un booleano
[defaults setBool:NO forKey:@"False"];
// Almacenamos un número
[defaults setFloat:7.0f forKey:@"Altura"];
// Salvamos los cambios
[defaults synchronize];
15. USER DEFAULTS 5
• Para recuperar la información
// Obtenemos el UserDefaults
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
// obtenemos un objeto genérico
id obj = [defaults objectForKey:@"Objeto"];
// Almacenamos un booleano
BOOL b = [defaults boolForKey:@"False"];
// Almacenamos un número
float f = [defaults floatForKey:@"Altura"];
17. CORE DATA
• CoreData es un framework de Cocoa y Cocoa Touch que
proporciona un ORM para Objective-C y SQLite
• Un ORM es un mapeador de objetos del lenguaje a tuplas
en la base de datos
• Gestiona todas las relacciones con la BBDD
18. CORE DATA 2
• Cada clase es representado por una tabla en la base de datos
• Cada objeto por una fila en la BBDD
• Cada atributo por un campo en una fila
19. CORE DATA 3
• CoreData es el encargado de volcar los cambios en la BBDD
• Tambiénes responsable de borrar y crear nuevos objetos en
la BBDD según se vayan necesitando
• Por
lo tanto abstrae el programador de todo acceso a la
BBDD
20. CORE DATA 4
• Cuandocreamos un projecto debemos indicarle que
emplearemos CoreData
21. CORE DATA 5
• Esto cambiará en cierto modo el AppDelegate con los trozos
de código para gestionar todos los eventos de CoreData
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
- (void)saveContext;
- (NSURL *)applicationDocumentsDirectory;
@end
22. CORE DATA 5
• Estosnuevos métodos, en principio, no tendremos que
tocarlos
• También nos habrá creado un fichero .xcdatamodeld
• Eneste fichero diseñaremos el modelo de datos de la
base de datos
23. CORE DATA 6
• Podemos editar el fichero . xcdatamodeld de manera visual