2010-02-16 21 views
31

Ho un NSDictionary che assomiglia a:NSDictionary a NSArray?

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

Per utilizzare questa NSDictionary elementi in una tabella Visualizza devo trasferirla a NSArray, ho ragione?

così cerco:

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

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

Ma _myArray mantiene vuoto? Che cosa sto facendo di sbagliato?

risposta

27

Lasciando da parte le questioni tecniche con il codice che hai postato, lei ha chiesto questo:

Per utilizzare questo articoli Dictionary in un Table View devo trasferirla a NSArray, ho ragione?

La risposta è: non necessariamente. Non c'è nulla di intrinseco al macchinario di UITableView, UITableViewDataSource o UITableViewDelegate che significa che i tuoi dati devono essere in un array. Dovrai implementare vari metodi per dire al sistema quante righe ci sono nella tua tabella e quali dati appariranno in ciascuna riga. Molte persone trovano molto più naturale ed efficiente rispondere a queste domande con una struttura dati ordinata come un array. Ma non c'è il numeroche tu faccia così. Se riesci a scrivere il codice per implementare questi metodi con il dizionario che hai iniziato, sentiti libero!

+2

So che è un vecchio post, ma signore, avete indovinato i miei pensieri! – Bogdan

2

Ci sono alcune cose che potrebbero accadere qui.

Il dizionario che hai elencato è il myDict? In tal caso, non hai un oggetto con una chiave di @"items" e la variabile dict sarà nulla. È necessario iterare direttamente tramite myDict.

Un'altra cosa da verificare è se _myArray è un'istanza valida di un NSMutableArray. Se è nulla, il metodo addObject: fallirà silenziosamente.

E l'ultima cosa da verificare è che gli oggetti all'interno del dizionario siano correttamente racchiusi in NSNumbers (o qualche altro tipo non primitivo).

+0

No, myDict non è l'esempio mostrato sopra, si dovrebbe mostrare che ho un NSDictionary di NSDictionarys. Come posso verificare se i miei oggetti sono NSNumbers? – phx

+0

Scusa, colpa mia! Uso improprio "addObject". Voglio aggiungereObjects di NSDictionarys al mio array! Quindi devo farlo in un altro modo! – phx

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

Ehi, voglio aggiungere Oggetti alla Matrice, non solo i valori. – phx

+24

Se leggi la documentazione, 'allValues' restituisce ogni oggetto che verrebbe restituito invocando' objectForKey: 'per ogni chiave nel dizionario. –

+3

Se si desidera aggiungere più oggetti, è necessario rendere questo un NSMutableArray in questo modo: 'NSMutableArray * valori = [[NSMutableArray alloc] initWithArray: [allValues ​​dizionario]];' –

0

Per ottenere tutti gli oggetti in un dizionario, è anche possibile utilizzare enumerateKeysAndObjectsUsingBlock: in questo modo:

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

Questi due permetteranno di dividere le chiavi e i valori del NSDictionary in due NSArrays separati. Molto utile. –

5

È possibile creare una matrice di tutti gli oggetti all'interno del dizionario e quindi utilizzarlo come origine dati per il TableView.

NSArray *aValuesArray = [yourDict allValues]; 
3

Codice Snippet1:

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

Codice Snippet2: Se si desidera aggiungere ulteriori

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

E così via

Inoltre è possibile memorizzare i valori chiave del dizionario per arr ay

NSArray *keys = [dictionary allKeys]; 
1

Hai solo bisogno di inizializzare il NSMutableArray

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

ha funzionato per me! Grazie :) –

0

Questo codice è effettivamente utilizzato per aggiungere valori ai dictionary e through i dati ad un Array Secondo il 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

a Swift 4:

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

let array = Array(dict.values) 
Problemi correlati