Upload
renato-tarazona-f
View
10
Download
0
Embed Size (px)
Citation preview
Curso de Iniciación a la Programación del iPhone SDK con Objective-CDatos en la aplicación
Moncada, 9 de Julio de 2010
2
Datos en la aplicación
- Sistema de archivos de una aplicación
- Accediendo a directorios
- Trabajando con rutas, 'paths'
- Bundles y recursos de la aplicación
- La clase NSBundle
- Obteniendo y almacenando datos
- Property lists
- NSXMLParser
- NSUserStandardDefaults
3
Sistema de archivos de una aplicación
Cada aplicación tiene su propio conjunto de directorios
<Application Home>
MyApp.app
MyApp
MainWindow.nib
SomeImage.png
Documents
Library
Caches
Preferences
• Aplicaciones sólo pueden escribir en su directorio Home
4
Trabajando con el sistema de directorios
- NSPathUtilities.h → Conjunto de categorías para trabajar con rutas del sistema de archivos de una aplicación
- Ejemplo (buscando el directorio Documents):
NSString *documentDirectory;
NSArray *paths = NSArray *paths = NSSearchPathForDirectoriesInDomains
(NSDocumentDirectory, NSUserDomainMask, YES);
documentsDirectory = [paths objectAtIndex:0];
5
Bundles y recursos de la aplicación
- Es un directorio con una estructura jerárquica estandarizada que contiene código ejecutable y los recursos usados por ese código.
- Ventajas:
- Se trabaja igual que con ficheros
- Su estructura permite añadir recursos de diferentes idiomas fácilmente.
- Instalar/Desinstalar → Drag&Drop
- Múltiples arquitecturas y sistemas de ficheros
- Tipos: aplicación, plug-ins, frameworks, widgets...
6
Bundles y recursos de la aplicación
Ejemplo de Application Bundle
MyApp.app
MyApp
Info.plist
Default.png
MainWindow.nib
Settings.bundle
en.lproj
MyImage.png
fr.lproj
MyImage.png
7
Accediendo al contenido del bundle
Accediendo al bundle de la aplicación
NSBundle *bundle = [NSBundle mainBundle];
Obteniendo la ruta de un recurso en el bundle
NSBundle *bundle = [NSBundle mainBundle];
[bundle pathForResource:@”image” ofType:@”jpg”];
8
Preferencias, Property Lists y XML
• Preferencias de usuario
– NSUserDefaults
– Settings y preferencias en la aplicación
• Property Lists
– Property Lists editor
– Leer y escribir Property Lists
• Obteniendo datos XML
- NSXMLParser y NSXMLParserDelegate
9
Property Lists
Es una manera de representar jerarquías simples de datos Sólo soporta arrays, diccionarios, strings, fechas, enteros,
dobles y booleanos Una property list es una clase (array o diccionario) que engloba
uno o varios objetos soportados Representada con XML o con un binario (más compacto) Se usa para una cantidad menor de unos pocos cientos de
KBs
10
Property Lists
Métodos para escribir
- (BOOL)writeToFile:(NSString *)aPath atomically:(BOOL)flag;
- (BOOL)writeToURL:(NSURL *)aURL atomically:(BOOL)flag;
Métodos para leer
- (id)initWithContentsOfFile:(NSString *)aPath;
- (id)initWithContentsOfURL:(NSURL *)aURL;
11
Property Lists
Ejemplo de lectura (en el caso de NSArray):
NSString *path = [[NSBundle mainBundle] pathForResource:@"places" ofType:@"plist"];
NSArray *placesArray = [NSArray initWithContentsOfFile:path];
12
Preferencias de usuario
• Dos tipos:
– Preferencias integradas en la aplicación
– Preferencias en la aplicación Settings
• Mutuamente exclusivas (¡Elige sólo un tipo!)
• Patrón de uso
– Opciones de configuración con poco uso → Settings
– Opciones de configuración regulares → Integradas
13
Preferencias de usuario
Clase NSUserDefaults
– Método de clase → +(id)standardUserDefaults
– Es una Property List
Ejemplo de uso (insertar valor y recuperarlo)
NSUserDefaults *defaults = [NSUserDefaults standardUserFDefaults];
[defaults setObject:@”Pedro” forKey: @”name”];
NSString *nombre = [defaults stringForKey:@”name”];
14
Settings Bundle
- Settings.bundle en tu aplicación sirve para añadir las preferencias a la aplicación Settings de iPhone/iPod/iPad
- Muestra una pantalla con controles
- Cada control tiene (al menos):
Tipo (Type)
Titulo (Title)
Clave (Key)
15
Demostración
16
NSXMLParser
Clase para parsear XML Dirigido por eventos Inicialización:
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[parser setDelegate:self];
[parser setShouldProcessNamespaces:NO];
[parser setShouldReportNamespacePrefixes:NO];
[parser setShouldResolveExternalEntities:NO];
[parser parse]; //empieza a parsear
17
NSXMLParserDelegate
Métodos importantes
- didStartElement → Ha encontrado un tag de inicio. Ej, <item>
- didEndElement → Ha encontrado un tag de final. Ej, </item>
- foundCharacters → Ha encontrado una cadena entre <></>
- parserDidStartDocument → Ha empezado a parsear
- parserDidEndDocument → Ha acabado de parsear
18
NSXMLParser
Patrón de diseño
1 Iniciar un objeto NSXMLParser y asignarle un delegado
2 didStartElement → Guardar el tag y reservar memoria estructura
3 didEndElement → Guardar valores en la estructura
4 foundCharacters → Guardar valor del tag
19
Demostración
20
Bibliografía
“Bundle Programming Guide”
“Property List Programming Guide”
“User Defaults Programming Topics”