2009-09-25 12 views
52

Para mostrar las claves/valores de un NSMutableDictionary secuencialmente (en una vista de tabla), necesito acceder a ellos por índice. Si el acceso por índice pudiera dar la clave en ese índice, podría obtener el valor. ¿Hay alguna manera de hacer eso o una técnica diferente?Acceso a objetos en NSMutableDictionary por índice

+0

Cuando haga lo siguiente: NSMutableDictionary * tmpDict = [[NSMutableDictionary alloc] init]; [tmpDict setObject: @ "CN-GSM" forKey: @ "Provider:"]; [tmpDict setObject: @ "10010" forKey: @ "Number:"]; [tmpDict setObject: @ "Sí" forKey: @ "Gratis:"]; NSLog (@ "% @", [tmpdict allKeys]); [tmpDict versión]; ¿Por qué la salida no está ordenada por el valor que agregué a tmpDict? – ZYiOS

Respuesta

119

Puede obtener un NSArray que contenga las claves del objeto usando el Método allKeys. A continuación, puede examinar eso por índice. Tenga en cuenta que el orden en que aparecen las teclas en la matriz es desconocido. Ejemplo:

NSMutableDictionary *dict; 

/* Create the dictionary. */ 

NSArray *keys = [dict allKeys]; 
id aKey = [keys objectAtIndex:0]; 
id anObject = [dict objectForKey:aKey]; 

EDIT: En realidad, si entiendo lo que estás tratando de hacer lo que quiera que se hace fácilmente mediante la enumeración rápida, por ejemplo:

NSMutableDictionary *dict; 

/* Put stuff in dictionary. */ 

for (id key in dict) { 
    id anObject = [dict objectForKey:key]; 
    /* Do something with anObject. */ 
} 

EDIT: error tipográfico fijo señalado por Marco.

+2

"allkeys" es "allKeys" – Mark

+0

En 'cellForRowAtIndexPath' en una vista de tabla que podría ser: 'NSArray * keys = [colors allKeys]; NSString * key = [claves objectAtIndex: indexPath.row]; cell = [tv dequeueReusableCellWithIdentifier: @ "CellColour" forIndexPath: indexPath]; cell.textLabel.text = [colores objectForKey: clave]; cell.backgroundColor = [self colorFromHexString: key]; ' –

9

puede obtener una matriz de todas las claves con el método allKeys del diccionario; y luego puedes acceder a la matriz por índice. sin embargo, un diccionario en sí mismo no tiene un orden inherente, por lo que el orden de las claves que obtiene antes y después de un cambio en el diccionario puede ser completamente diferente

Cuestiones relacionadas