2010-08-16 25 views
5

tengo un plist que dice así:datos de acceso plist

<dict> 
    <key>11231654</key> 
    <array> 
     <string>hello</string> 
     <string>goodbye</string> 
    </array> 
    <key>78978976</key> 
    <array> 
     <string>ok</string> 
    <string>cancel</string> 
    </array> 

ive cargar el plist usando esto:

NSString *path = [[NSBundle mainBundle] pathForResource: 
        @"data" ofType:@"plist"]; 
    // Build the array from the plist 
    NSMutableArray *array3 = [[NSMutableArray alloc] initWithContentsOfFile:path]; 

¿cómo puedo acceder a cada elemento de mi plist? Quiero buscar una clave coincidente en el plist y buscar con su hijo. ¿Cómo puedo hacer esto? ¿cualquier sugerencia?

¡gracias por adelantado!

Respuesta

8

Las matrices están indexadas. Si usted quiere acceder al primer objeto en un NSArray, haría lo siguiente:

id someObject = [array objectAtIndex:0]; 

Si conoce el tipo de objeto, que podría hacerlo de esta manera:

NSString *myString = [array objectAtIndex:0]; 

EDITAR: Debe utilizar un NSDictionary para los datos que tenga-tenga en cuenta que comienza con una etiqueta <dict>, no una etiqueta <array> (aunque hay matrices como valores).

NSString *path = [[NSBundle mainBundle] pathForResource: 
       @"data" ofType:@"plist"]; 
// Build the array from the plist 
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path]; 

NSArray *value = [dict valueForKey:@"11231654"]; 

Ahora puede hacer lo que quiera con su matriz.

+0

¿cómo puedo acceder al valor del índice? 11231654 en este ejemplo – Stefan

+0

En ese caso, sus datos deben cargarse en un 'NSDictionary'. Actualizaré mi respuesta. –

1

Here es un enlace a un debate que proporcionó un muy buen ejemplo de cómo acceder a sus datos y qué tipo de esquemas de almacenamiento serían más beneficiosos en determinadas circunstancias. La solución de @Jeff Kelley está en el objetivo, solo pensé que esta pregunta agregaría un recurso adicional. ¡Espero que esto ayude!

1

Esta es la forma en que necesita para crear plist

plist screenshot

raíz Conjunto de matriz en lugar de diccionario, esto le dará resultados en secuencia. Con las siguientes líneas de código, puede obtener una lista completa.

NSString *pathOfPlist = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"]; 
arrPlistValue = [[NSArray alloc]initWithContentsOfFile:path]; 
NSLog(@"Plist Value : %@",arrPlistValue); 

Después de que se puede recuperar cualquier contenido específico con código de abajo:

NSString *strName = [[arrTempValue objectAtIndex:0] objectForKey:@"name"]; 
NSString *strImage = [[arrTempValue objectAtIndex:0] objectForKey:@"image"]; 
int idValue = [[[arrTempValue objectAtIndex:0] objectForKey:@"id"] integerValue]; 
BOOL isSubCat = [[[arrTempValue objectAtIndex:0] objectForKey:@"isSubCategory"] boolValue]; 

Con este código se puede recuperar entero, cadena, booleano de plist.!