2013-01-16 9 views
5

Używam plist do przechowywania list wartości dla wartości. Gdy aplikacja potrzebuje tej listy, próbuje załadować listę do NSDictionary. Wszystko jest dobrze, aż tutaj.Ładowanie NSDictionary z Plist na liście

Oto jak załadować plik plist:

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

Kiedy patrzymy, cities jest NSDictionary. Następnie wepchnąłem wszystkie wartości klucza listy do TableView, w jakiś sposób nie jest ona wymieniona jako w pliku plist. Sortowanie losowe.

Czy można się domyślić? Z góry dzięki.

+1

Czy znaleźć rozwiązanie dla tego? Mam ten sam problem. –

Odpowiedz

4

An NSDictionary nie jest zbiorem zamówionym, to znaczy nie gwarantuje zachowania kolejności zawartości w żaden sposób. Jego jedyną funkcją jest mapowanie z kluczy na wartości.

Jeśli potrzebujesz zawartość zamówionych można wyodrębnić go z NSDictionary stosując na przykład keysSortedByValueUsingSelector, który będzie wyodrębnić dane w zbiorach, sortować je według swoich kryteriów i przechowywać je w kolejności (zachowanie) NSArray.

Można również rozważyć użycie tablicy w katalogu głównym pliku plist, zawierającej uporządkowaną listę słowników miejskich. Następnie, jeśli przejdziesz przez tablicę w nim zawartą, będą one w kolejności tablicowej zawartej w pliku plist.

+0

Dzięki za nowatorską odpowiedź. –

1

NSDictionary nie jest uporządkowaną strukturą danych.

Obiekty są wymienione na podstawie funkcji allKeys, a klucze są wymienione w sposób nieokreślony.

Zobacz dokumentację dotyczącą jabłka dla funkcji allKeys.

AllKeys klasy zwraca nową tablicę zawierającą klucze słownika użytkownika.

  • (NSArray *) AllKeys klasy

Return Value Nowa tablica zawierająca klucze słownika, albo pustą tablicę, jeśli słowniku nie ma wpisów.

Dyskusja kolejność elementów w tablicy nie jest zdefiniowana.

+2

Dziękuję za odpowiedź, więc jaka jest Twoja sugestia do załadowania zgodnie z listą? –

0

Jeśli chcesz uniknąć stosując selektor sortowania klucze, należy rozważyć użycie tablicy w korzeniu plist. Następnie, gdy przejdziesz przez tablicę, kolejność zostanie zachowana. To działa O (n), który jest krótszy niż najszybszego algorytmu sortowania przez współczynnik log (n)
np

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