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
CONTENIDO


• Introducción

• User   Defaults

• Core   Data
CONTENIDO


   • Introducción

• User   Defaults

• Core   Data
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
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...
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
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
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
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];
CONTENIDO


• Introducción

   • User   Defaults

• Core   Data
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
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
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
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];
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"];
CONTENIDO


• Introducción

• User   Defaults

   • Core    Data
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
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
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
CORE DATA 4
• Cuandocreamos un projecto debemos indicarle que
 emplearemos CoreData
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
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
CORE DATA 6
• Podemos   editar el fichero . xcdatamodeld de manera visual
FIN

Ios.s9

  • 1.
    9 - PERSISTENCIAY COREDATA Curso de desarrollo de aplicaciones móviles para iPhone y iPad endika.gutierrez@urbegi.com alex.rayon@urbegi.com Urbegi Learning Contents
  • 2.
    CONTENIDO • Introducción • User Defaults • Core Data
  • 3.
    CONTENIDO • Introducción • User Defaults • Core Data
  • 4.
    INTRODUCCIÓN • En laaplicaciones 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écnicascada 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 • Paraelalmacenaje 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 • Laescriturade 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];
  • 10.
    CONTENIDO • Introducción • User Defaults • Core Data
  • 11.
    USER DEFAULTS • Userdefaultses 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"];
  • 16.
    CONTENIDO • Introducción • User Defaults • Core Data
  • 17.
    CORE DATA • CoreDataes 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
  • 24.