2013-01-16 15 views
5

Sto utilizzando plist per memorizzare valori-chiave elenchi. Quando l'applicazione ha bisogno di quell'elenco, provare a caricare l'elenco su un NSDictionary. Tutto va bene fino a qui.Caricamento NSDictionary da Plist as Listed

Ecco come ho caricare il file plist:

NSString *myPlistFilePath = [[NSBundle mainBundle] pathForResource: @"cities" ofType: @"plist"]; 
cities = [NSDictionary dictionaryWithContentsOfFile: myPlistFilePath]; 

Quando guardiamo, cities è un NSDictionary. Quindi ho spostato tutti i valori delle chiavi di elenco in un TableView, in qualche modo non è elencato come nel file Plist. Ordinamento casuale

C'è un modo per capire? Grazie in anticipo.

+1

Hai trovato una soluzione per questo? Sto avendo lo stesso problema –

risposta

4

An NSDictionary non è una raccolta ordinata, cioè, non garantisce di preservare l'ordine dei contenuti in alcun modo. La sua unica funzione è quella di mappare da chiavi a valori.

Se è necessario il contenuto ordinato, è possibile estrarre dal NSDictionary utilizzando, ad esempio keysSortedByValueUsingSelector, che estrarre i dati nella raccolta, ordinamento che per i criteri e conservarla in un (ordine preservando) NSArray.

In alternativa, è consigliabile utilizzare una matrice nella radice del plist, contenente un elenco ordinato di dizionari di città. Quindi se si esegue un'iterazione sull'array in esso contenuto, si troveranno nell'ordine di matrice contenuto nel plist.

+0

Grazie per la risposta seminale. –

1

NSDictionary non è una struttura di dati ordinati.

Gli oggetti sono elencati in base alle funzioni allKeys e le chiavi sono elencate in modo indefinito.

Vedere la doc di apple per la funzione allKeys.

allKeys restituisce un nuovo array contenente le chiavi del dizionario.

  • (NSArray *) allKeys

Return Value un nuovo array che contiene le chiavi del dizionario, o un array vuoto se il dizionario non ha inserzioni.

Discussione L'ordine degli elementi nell'array non è definito.

+2

Grazie per la risposta, quindi qual è il tuo suggerimento da caricare come elencato? –

0

Se si desidera evitare l'uso di un selettore per ordinare le chiavi, considerare l'utilizzo di un array nella radice del plist. Quindi, quando si esegue l'iterazione sull'array, l'ordine viene mantenuto. Questo viene eseguito O (n), che è più breve rispetto al più veloce algoritmo di ordinamento possibile da un fattore di log (n)
esempio:

cities{ 
    list[ 
    city{} 
    city{} 
    city{} 
    ... 
    ] 
}