2010-02-16 9 views
31

Tengo un NSDictionary que se parece a:NSDiccionario a NSArray?

{ 
"Item1" = 2.4; 
"Item2" = 5.5; 
"Item3" = 15.6; 
} 

Para utilizar esta NSDictionary Los productos en una vista de tabla que tengo que transferirla a un NSArray, estoy en lo cierto?

así que trato:

NSDictionary *dict = [myDict objectForKey:@"items"]; 

for (id item in dict) { 
    [_myArray addObject:[dict objectForKey:item]]; 
} 

Pero _myArray mantiene vacía? ¿Qué estoy haciendo mal?

Respuesta

27

Dejando a un lado los problemas técnicos con el código que envió, que pidió esto:

Para utilizar este diccionario artículos en una vista de tabla que tengo que transferirla a un NSArray, estoy en lo cierto?

La respuesta es: no necesariamente. No hay nada intrínseco a la maquinaria de UITableView, UITableViewDataSource, o UITableViewDelegate que significa que sus datos tienen que estar en una matriz. Tendrá que implementar varios métodos para decirle al sistema cuántas filas hay en su tabla y qué datos aparecen en cada fila. A muchas personas les resulta mucho más natural y eficiente responder esas preguntas con una estructura de datos ordenada como una matriz. Pero no hay ningún requisito que lo haga. Si puede escribir el código para implementar esos métodos con el diccionario con el que comenzó, ¡siéntase libre!

+2

Sé que es una publicación anterior, pero señor, ¡ha adivinado mis pensamientos! – Bogdan

2

Hay algunas cosas que podrían estar sucediendo aquí.

¿Es el diccionario que usted ha enumerado myDict? Si es así, entonces no tiene un objeto con una clave de @"items", y la variable dict será nula. Necesita iterar por myDict directamente.

Otra cosa para comprobar es si _myArray es una instancia válida de NSMutableArray. Si es nula, el método addObject: fallará en silencio.

Y una última cosa para comprobar es que los objetos dentro de su diccionario están correctamente encerrados en NSNumbers (o algún otro tipo no primitivo).

+0

No, myDict no es el ejemplo mostrado anteriormente, se debe demostrar que tengo un NSDictionary de NSDictionarys. ¿Cómo puedo verificar si mis objetos son NSNumbers? – phx

+0

Lo siento, ¡mi culpa! Uso mal "addObject". ¡Quiero agregar objetos de NSDictionarys a mi matriz! ¡Así que tengo que hacerlo de otra manera! – phx

221
NSArray * values = [dictionary allValues]; 
+0

Oye, quiero agregar objetos a la matriz, no solo los valores. – phx

+24

Si lee la documentación, 'allValues' devuelve todos los objetos que se devolverán al invocar' objectForKey: 'para cada clave del diccionario. –

+3

Si desea agregar más objetos, que necesita para hacer de este un NSMutableArray así: 'NSMutableArray * Valores = [[NSMutableArray alloc] initWithArray: [allValues ​​diccionario]];' –

0

para conseguir todos los objetos en un diccionario, también se puede utilizar enumerateKeysAndObjectsUsingBlock: así:

NSMutableArray *yourArray = [NSMutableArray arrayWithCapacity:6]; 
[yourDict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { 
    [yourArray addObject:obj]; 
}]; 
42
NSArray *keys = [dictionary allKeys]; 
NSArray *values = [dictionary allValues]; 
+0

Estos dos le permitirán dividir las claves y valores de NSDictionary en dos NSArrays separadas. Muy útil. –

5

puede crear una matriz de todos los objetos dentro del diccionario y luego usarlo como una fuente de datos para el TableView.

NSArray *aValuesArray = [yourDict allValues]; 
3

Código Snippet1:

NSMutableArray *array = [[NSMutableArray alloc] init]; 
NSArray * values = [dictionary allValues]; 
[array addObject:values]; 

Código Snippet2: Si desea agregar más

[array addObject:value1]; 
[array addObject:value2]; 
[array addObject:value3]; 

Y así sucesivamente

También puede almacenar valores clave del diccionario a arr ay

NSArray *keys = [dictionary allKeys]; 
1

sólo tiene que inicializar su NSMutableArray

NSMutableArray *myArray = [[NSMutableArray alloc] init]; 
+0

funcionó para mí! Gracias :) –

0

Este código se utiliza realmente para añadir valores a los dictionary y through los datos a un Array De acuerdo con la Key.

NSMutableArray *arr = [[NSMutableArray alloc]init]; 
NSDictionary *dicto = [[NSMutableDictionary alloc]initWithObjectsAndKeys:@"Hello",@"StackOverFlow",@"Key1",@"StackExchange",@"Key2", nil]; 
NSLog(@"The dictonary is = %@", dicto); 
arr = [dicto valueForKey:@"Key1"]; 
NSLog(@"The array is = %@", arr); 
0

En Swift 4:

let dict = ["Item1":2.4, "Item2": 5.4, "Item3" : 6.5] 

let array = Array(dict.values)