Domanda

Ho un paio di dizionari in un elenco delle proprietà, che compongono un sistema di menu per il mio gioco, in questo modo:

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

ecc .. Ogni elemento in questo elenco è un dizionario.

Io uso UINavigationController e UITableViews per visualizzare questo sistema di menu. Quando un elemento viene scelto, una nuova UITableViewController viene spinto nel UINavigationController, insieme con gli elementi di tale elemento prescelto. Per exmaple, la prima UITableView contiene "Nuova partita", "gioco Load" e "Opzioni" nel suo dizionario. Se l'utente seleziona le opzioni, una nuova UITableViewController si crea con gli articoli "gioco" e "Sound" (vale a dire il dizionario dei "Opzioni").

Io popolo del UITableView in questo modo:

- (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;
}

Ma a quanto pare, che fa sì che gli elementi di non venire nello stesso ordine in cui sono definiti nella lista di proprietà.

Qualcuno sa come preservare l'ordine quando fare quello che sto cercando di fare?

Grazie.

È stato utile?

Soluzione

Dizionari mai conservano ordine. Avrete bisogno di usare un array. È possibile utilizzare una matrice invece (non vedo alcuna ragione per cui si avrebbe bisogno di un dizionario dal vostro esempio), oppure è possibile creare una matrice che indicizza il dizionario.

Quindi, iniziare con il dizionario che hai ora, creare un array, ciclo attraverso il dizionario e impostare i valori di matrice per le chiavi nel dizionario.

Così, se il dizionario si presentava così

Game Types
    easy: Easy
    normal: Normal
    hard: Hard

Il nuovo array sarebbe simile a questa: [ "facile", "normale", "duro"] (niente di tutto questo è il codice Objective C). È quindi possibile utilizzare la seguente riga.

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

Altri suggerimenti

dizionari non devono essere conteggiati a mantenere l'ordine. Questo è il punto di un array.

È necessario un array di oggetti del dizionario che hanno un titolo e una lista di opzioni.

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

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

La tabella livello superiore mostrerà il titolo di ogni sottopagina, e ogni pagina secondaria viene visualizzata una tabella delle sue opzioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top