1

我在属性列表中有几个字典,它们构成了我的游戏的菜单系统,如下所示:

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

等等。这个列表中的每个项目都是一个字典。

我使用 UINavigationController 和 UITableViews 来显示这个菜单系统。当一个项目被选中时,一个新的 UITableViewController 被推送到 UINavigationController 中,以及该项目的项目。例如,第一个 UITableView 在其字典中包含“New Game”、“Load game”和“Options”。如果用户选择选项,则使用“游戏”和“声音”项(即“选项”的字典)创建一个新的 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;
}

但显然,这会导致项目的顺序与属性列表中定义的顺序不同。

有谁知道在做我想做的事情时如何保持订单?

谢谢。

4

2 回答 2

5

字典从不保持秩序。您需要使用数组。您可以改用数组(我看不出有任何理由需要您的示例中的字典),也可以创建一个为字典编制索引的数组。

因此,从您现在拥有的字典开始,创建一个数组,遍历字典并将数组值设置为字典中的键。

所以如果你的字典看起来像这样

Game Types
    easy: Easy
    normal: Normal
    hard: Hard

您的数组将如下所示: ["easy", "normal", "hard"] (这些都不是目标 c 代码)。然后,您可以使用以下行。

[myDictionary objectForKey:[myArray objectAtIndex: indexPath.row]]
于 2010-02-06T19:47:51.123 回答
3

不应指望字典来维持秩序。这就是数组的意义所在。

您需要一个具有标题和选项列表的字典对象数组。

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

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

您的顶级表格将显示每个子页面的标题,每个子页面将显示其选项表。

于 2010-02-06T19:48:02.220 回答