2010-02-06 1 views
1

Я получил пару словарей в списке свойств, которые составляют систему меню для моей игры, как так:iPhone - NSDictionary к NSArray с сохранением порядка

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

и т.д .. Каждый элемент в этом Список - это словарь.

Я использую UINavigationController и UITableViews для отображения этой системы меню. Когда элемент выбран, новый UITableViewController помещается в UINavigationController вместе с элементами этого выбранного элемента. Для exmaple первый 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 

Ваш массив будет выглядеть следующим образом: [ «простой», «нормальный», «жесткий»] (все это не является объективным с кодом). Затем вы можете использовать следующую строку.

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

Но действительно, дайте каждому контроллеру вида отдельный NSArray с соответствующими параметрами. Не используйте вложенный словарь –

+0

Спасибо. То, что я закончил, - это набор словарей. В каждом словаре есть поле заголовка и поле опций, где параметры - это новый массив с большим количеством этих словарей. – quano

3

Словарь не должен учитываться для сохранения порядка. Это точка массива.

Вам нужен массив объектов словаря, у которых есть заголовок и список параметров.

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

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

В таблице верхнего уровня будет отображаться заголовок каждой подстраницы, и на каждой подстранице будет отображаться таблица его опций.

 Смежные вопросы

  • Нет связанных вопросов^_^