2013-01-16 34 views
5

我使用plist來存儲鍵值列表。當應用程序需要該列表時,嘗試將加載列表設置爲NSDictionary。一切都很好,直到這裏。從列表中載入NSDictionary列表

在這裏,我怎麼加載plist文件:

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

當我們在看,citiesNSDictionary。然後我將所有列表鍵值推送到一個TableView,不知何故它沒有列在plist文件中。隨機排序。

有辦法弄清楚嗎? 在此先感謝。

+1

你找到了一個解決方案?我有同樣的問題 –

回答

4

NSDictionary不是一個有序的集合,也就是說,它不保證以任何方式保持內容的順序。它唯一的功能是從鍵映射到值。

如果您需要訂購的內容,可以使用例如keysSortedByValueUsingSelector從NSDictionary中提取它,它將提取集合中的數據,按照您的條件對其進行排序並將其存儲在(保留順序)NSArray中。

或者,考慮在plist的根目錄中使用數組,其中包含城市字典的有序列表。然後,如果迭代包含在其中的數組,它們將按照plist中包含的數組順序排列。

+0

感謝您的精彩答案。 –

1

NSDictionary不是一個有序的數據結構。

對象是根據allKeys函數列出的,鍵以未定義的方式列出。

請參閱蘋果文檔allKeys函數。

allKeys返回包含字典的密鑰的新的數組。

  • (NSArray的*)allKeys

返回值含有字典的鍵,或者一個空 陣列如果字典沒有條目的新陣列。

討論未定義數組中元素的順序。

+2

感謝您的回答,那麼您有什麼建議可以加載列表? –

0

如果你想避免使用選擇器鍵排序,考慮在plist中的根使用數組。然後,當您遍歷數組時,順序將被保留。這將運行O(N),這比最快的排序算法通過短日誌的因素(N)
如:

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