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

辞書は順序を保持しません。Array を使用する必要があります。代わりに配列を使用するか (例から辞書が必要な理由はわかりません)、辞書にインデックスを付ける配列を作成できます。

したがって、現在持っている辞書から始めて、配列を作成し、辞書をループして、配列の値を辞書のキーに設定します。

あなたの辞書がこのように見えたら

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 に答える