Está en la página 1de 38

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.

biz

Persistencia Sencilla
NSUserDefaults

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

NSUserDefaults
Persistir Pequeas Cantidades de Datos

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

NSUserDefaults

Se usa para persistir pequeas cantidades


de datos, como preferencias de usuario.

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

NSUserDefaults
Se usa para persistir pequeas cantidades
de datos, como preferencias de usuario.

NSString, NSNumber, NSDate, NSArray y


NSDictionary.

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

NSUserDefaults
Se usa para persistir pequeas cantidades
de datos, como preferencias de usuario.

NSString, NSNumber, NSDate, NSArray y


NSDictionary.

Es un NSDictionary que automgicamente


guarda su contenido en disco.

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Patrn de Uso de
NSUserDefaults
Al arrancar la app, nos aseguramos de que
estn presentes valores por defecto.

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Patrn de Uso de
NSUserDefaults
Al arrancar la app, nos aseguramos de que
estn presentes valores por defecto.

A lo largo de la app, vamos leyendo o


modificando los valores.

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Patrn de Uso de
NSUserDefaults
Al arrancar la app, nos aseguramos de que
estn presentes valores por defecto.

A lo largo de la app, vamos leyendo o


modificando los valores.

Aunque guarda en disco de forma

automtica, es recomendable forzar un


guardado con el mtodo synchronize.

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Creacin de
NSUserDefaults
Con el mtodo de clase

standardUserDefaults

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Valor por Defecto


Se asigna en application:didFinishLaunchingWithOptions:
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
// comprobamos que no hay nada en la direccin
if (![defaults objectForKey:@"direccin"]) {
// Si no hay nada, lo aadimos
[defaults setObject:@"1 Infinite Loop, Cupertino"
forKey:@"direccin"];
// Aunque se guarda automgicamente a cada x segundos
// es prudente guardar despus de aadir algo
[defaults synchronize];
}
// A partir de aqu siempre que se acceda a la clave
// direccin, sabremos que al menos hay el valor por
// defecto
}
Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Lectura y Escritura
Igual que un NSDictionary
// Leemos un valor
NSString *dir = [defaults objectForKey:@"direccin"];
// Escribimos un valor
[defaults setObject:@"13, Rue del Percebe"
forKey:@"direccin"];
// Guardamos, que Murphy acecha!
[defaults synchronize];

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Error Comn
Todo lo que devuelve NSUserDefaults
es Inmutable, aunque t lo hayas
guardado como Mutable!

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Error Comn
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
// Creo un array mutable con algunos nombres
NSMutableArray *starWars = [NSMutableArray arrayWithObjects:
@"Anakin Skywalker",
@"Obi Wan Kenobi", nil];
// Lo guardo en NSUserDefaults
[defaults setValue:starWars
forKey:@"nombres"];
// Lo recupero e intento aadir algo:
// me da un error, porque en vez de un NSMutableArray
// me devuelve un NSArray (no es modificable)!
starWars = [defaults objectForKey:@"nombres"];
[starWars addObject:@"Frodo Bolson"]; // error! Se cae la app. :-(
// He de crear una copia mutable (con mutableCopy)
// para poder hacer moficiaciones
starWars = [[defaults objectForKey:@"nombres"] mutableCopy];
[starWars addObject:@"Minch Yoda"]; // ahora s que funciona :-)

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Persistencia Intermedia
Sistema de Archivos y Sandbox

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Sistema de Archivos

Es un sistema de ficheros Unix

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Sistema de Archivos
Es un sistema de ficheros Unix
La seguridad es muy estricta

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Sistema de Archivos
Es un sistema de ficheros Unix
La seguridad es muy estricta
Toda App est encerrada en una Sandbox

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

La Sandbox
Una jaula en la que est encerrada tu App

Por seguridad: nadie puede


sobreescribir tus datos.

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

La Sandbox
Una jaula en la que est encerrada tu App

Por seguridad: nadie puede


sobreescribir tus datos.

Por privacidad: nadie puede leer


tus datos.

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

La Sandbox
Una jaula en la que est encerrada tu App

Por seguridad: nadie puede


sobreescribir tus datos.

Por privacidad: nadie puede leer


tus datos.

Por higiene: cuando tu App es

eliminada, no deja rastros en el


sistema.
Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Principales Carpetas de
la Sandbox

App bundle: tiene tus binarios, imgenes,


etc. Es de solo lectura.

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Principales Carpetas de
la Sandbox
App bundle: tiene tus binarios, imgenes,
etc. Es de solo lectura.

Documentos: para guardar datos

permanentes creados por el usuario

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Principales Carpetas de
la Sandbox
App bundle: tiene tus binarios, imgenes,
etc. Es de solo lectura.

Documentos: para guardar datos

permanentes creados por el usuario

Caches: Datos temporales (no se hace


copia de seguridad con iTunes)

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Principales Carpetas de
la Sandbox
App bundle: tiene tus binarios, imgenes,
etc. Es de solo lectura.

Documentos: para guardar datos

permanentes creados por el usuario

Caches: Datos temporales (no se hace


copia de seguridad con iTunes)

Otros: ver NSSearchPathDirectory en la


documentacin

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Manejo de Archivos y
Directorios
Se usan 3 clases

NSFileManager

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Manejo de Archivos y
Directorios
Se usan 3 clases

NSFileManager
NSString
NSData
Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Obtener la Ruta a las


Carpetas del Sandbox
// Obtenemos una instancia de NSFileManager
NSFileManager *fm = [NSFileManager defaultManager];
// El mtodo URLsForDirectory:inDomains:
// devuelve un NSArray de NSURLs, pero
// solo nos interesa el ltimo
NSArray *urls = [fm
URLsForDirectory:NSDocumentDirectory
inDomains:NSUserDomainMask];
// La forma estndar de acceder a recursos locales
// o remotos es mediante un NSURL
NSURL *url = [urls lastObject];
// Si queremos acceder a un fichero, aadimos
// su nombre a la ruta
url = [url URLByAppendingPathComponent:@"MyFile"];
Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Gestin de errores en
Cocoa
Todo mtodo que pueda generar un error
tiene dos caractersticas:

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Gestin de errores en
Cocoa
Todo mtodo que pueda generar un error
tiene dos caractersticas:

Devuelve un BOOL o un objeto

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Gestin de errores en
Cocoa
Todo mtodo que pueda generar un error
tiene dos caractersticas:

Devuelve un BOOL o un objeto


Acepta un NSError* por referencia.
Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Gestin de errores en
Cocoa
Todo mtodo que pueda generar un error
tiene dos caractersticas:

Devuelve un BOOL o un objeto


Acepta un NSError* por referencia.

Lo que determina si se ha producido un


error es el valor de retorno.

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Gestin de Errores
Ha devuelto NO o nil?

No

No ha habido
error

Se ha producido
un error.

Inspeccionamos
el NSError

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Lectura y Escritura con


NSString
// Escritura
[@"hola" writeToURL:atomically:encoding:error:]
// Lectura
[NSString stringWithContentsOfURL:usedEncoding:error:]

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Lectura y Escritura con


NSData
// Escritura
NSData *data = [NSData data];
[data writeToURL:options:error:];
// Lectura
[NSData dataWithContentsOfURL:options:error:];

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Error Comn
Lo que indica el error es el valor de
retorno, no que haya algo en el
puntero a NSError!

Copyright AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

También podría gustarte