2010-02-06 50 views
1

我有一個屬性列表一對夫婦字典,組成一個菜單系統,我的比賽,像這樣:iPhone - 的NSDictionary的NSArray來保存與秩序

New game 
    Easy 
    Normal 
    Hard 
Load game 
    Recent 
    Older 
Options 
    Game 
    Sound 

等。圖中的每個項目列表是一本字典。

我使用UINavigationController和UITableViews來顯示這個菜單系統。當一個項目被選中時,一個新的UITableViewController被推入到UINavigationController中,以及所選項目的項目中。例如,第一個UITableView在其字典中包含「新遊戲」,「加載遊戲」和「選項」。如果用戶選擇選項,則用項目「遊戲」和「聲音」(即「選項」的字典)創建新的UITableViewController。

我填充的UITableView這樣:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) 
    { 
     cell = [[[UITableViewCell alloc] init] autorelease]; 
    } 

    // Set up the cell... 

    cell.text = [[[data keyEnumerator] allObjects] objectAtIndex:indexPath.row]; 

    // Data is the dictionary.. 

    return cell; 
} 

但很顯然,這會導致項目無法進來相同的順序,因爲它們在屬性列表定義。

有沒有人知道如何保持秩序,當我想做什麼?

謝謝。

回答

5

詞典從不保存順序。你需要使用一個數組。你可以使用一個數組來代替(我沒有看到你需要你的例子中的字典的任何理由),或者你可以創建一個索引字典的數組。

因此,從現在的字典開始,創建一個數組,循環訪問字典並將數組值設置爲字典中的鍵。

所以,如果你的字典看上去像這樣

Game Types 
    easy: Easy 
    normal: Normal 
    hard: Hard 

你的陣列是這樣的:「易」,「正常」,「硬」(這一切都不是客觀的C代碼)。然後你可以使用下面一行。

[myDictionary objectForKey:[myArray objectAtIndex: indexPath.row]] 
+0

但是真的,給每個視圖控制器一個單獨的NSArray及其相應的選項。不要使用嵌套字典 – 2010-02-06 19:51:12

+0

謝謝。我最終做的是製作一系列字典。每個字典都有一個標題字段和一個選項字段,其中的選項是包含更多這些字典的新數組。 – quano 2010-02-06 20:51:46

3

字典不應該指望維護秩序。這是一個數組的重點。

您需要一個包含標題和選項列表的字典對象數組。

NSArray *options = [NSArray arrayWithObjects:@"Easy",@"Normal",@"Hard",nil]; 

NSDictionary *newGame = [[[NSDictionary alloc] initWithObjectsAndKeys:@"New game", @"title", options, @"options",nil]autorelease]; 

您的頂級表將顯示每個子頁面的標題,每個子頁面將顯示其選項的表格。