Carga de datos desde archivo plist

1 view
Skip to first unread message

mazcunan

unread,
Nov 21, 2010, 6:49:40 AM11/21/10
to ios-spa
Hola a todos,

Por ir haciendo alguna cosa interesante. Esto es una de las cosas que
os pueden ser útiles y que no vimos en la última edición del curso. Si
vimos el selector compare: la mañana del Viernes, pero no como hacer
uso de el para crear un array ordenado ni como recuperar datos de un
archivo plist, que viene a ser un XML. Notar que todo lo que uso son
funciones NSxxxx, es decir, que pertenecen a Objective-C. Con esto
quiero decir que no sólo nos valen para el iOS sino también para la
programación con Objective-C en general (aunque Apple haya optimizado
el compilador gcc de sus sistemas, deberíais poder compilar con gcc en
cualquier sistema).

Podéis crear/editar archivos plist (XML, al fin y al cabo...) con la
herramienta Property List Editor que viene con el XCode.

Para cargar los datos en la aplicación, seguimos los siguientes pasos:

- Definir la ruta del archivo plist (pongamos archivo.plist)

NSString *ruta = [[NSBundle mainBundle] pathForResource: @"archivo"
ofType: @"plist"];

- Cargar los contenidos del archivo plist como un NSDictionary. El
tema es que ese archivo contendrá los datos parseados de forma que
podemos acceder a ellos mediante un sistema key/value.

NSDictionary *datos = [[NSDictionary alloc]
initWithContentsOfFile:ruta ];

- Para consultar los datos hemos de tener en cuenta la estructura del
archivo:

id dato = [datos objectForKey: @"etiqueta"];

- Podemos meter todas las etiquetas de un diccionario en un array
usando:

NSArray * array = [datos allKeys];

- Podemos ordenar los datos de un array de la siguiente manera:

NSArray * array = [[datos allKeys] sortedArrayUsingSelector:
@selector(compare:)];

- Para comparar una cadena A con una cadena B y saber si son iguales,
si se ordenan A B o si se ordenan B A hacemos lo siguiente:

BOOL iguales = NO;
if ([A compare:B] == NSOrderedSame) iguales = YES;

BOOL AB = NO;
if ([A compare:B] == NSOrderedAscending) AB = YES;

BOOL BA = NO;
if ([A compare:B] == NSOrderedDescending) BA = YES;

Reply all
Reply to author
Forward
0 new messages