iPhone - NSDictionary a NSArray con ordine conservato
-
19-09-2019 - |
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.
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.