J'ai un NSMutableArray avec 30 dictionnaires à l'intérieur. Chacun contient un nom et une valeur. J'ai actuellement les noms triés de sorte que le spectacle dans une table par ordre alphabétique. Cependant, je voudrais faire un UIButton pour donner l'option d'AFFICHER ENCORE LES NOMS, mais ordonnée par la valeur. La valeur n'a pas besoin d'être affichée. Aussi, où dans les fichiers .m/.h ces codes seraient-ils placés? MERCI!iPhone Obj C - Tri d'un tableau Mutable de dictionnaires - affiche une chaîne mais tri par valeur
3
A
Répondre
22
Pour pouvoir vous aider, j'ai besoin de données de test. Disons que votre tableau avec des données ressemble à ceci:
NSMutableArray *aMutableArray = [NSMutableArray arrayWithObjects:
[NSDictionary dictionaryWithObjectsAndKeys:
@"A", @"name",
[NSNumber numberWithInt:6], @"value", nil],
[NSDictionary dictionaryWithObjectsAndKeys:
@"C", @"name",
[NSNumber numberWithInt:2], @"value", nil],
[NSDictionary dictionaryWithObjectsAndKeys:
@"B", @"name",
[NSNumber numberWithInt:4], @"value", nil], nil];
Dans ce cas de cas est ici comment vous trier par valeur:
NSSortDescriptor *aSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"value" ascending:YES];
[aMutableArray sortUsingDescriptors:[NSArray arrayWithObject:aSortDescriptor]];
Quant à savoir où placer ce lieu code partout où vous avez besoin du réordonnancement se produire (dans le fichier de mise en œuvre [.m] bien sûr). HTH et s'il y aura des questions, demandez-leur dans les commentaires.
Merci beaucoup! Cependant, mon tableau et mes dictionnaires sont stockés dans une plist !!! Désolé d'avoir oublié ça. J'ai découvert (apparemment) que cela serait extrêmement difficile, voire impossible à réaliser. Je suis donc passé à un projet basé sur une fenêtre, avec une barre d'onglets et des contrôleurs de navigation à l'intérieur. Je configure maintenant le premier onglet, avec un contrôleur de navigation à l'intérieur, qui ressemble à ceci: – Nathan
- (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath { // La logique de navigation peut aller ici . Créez et poussez un autre contrôleur de vue. \t \t DescriptionViewController * descriptionViewController = [[DescriptionViewController alloc] initWithNibName: @ paquet "de DescriptionViewController": nil]; \t descriptionViewController.teamarray = [self.teams \t \t \t \t \t \t \t \t \t \t objectAtIndex: indexPath.row]; \t [self.navigationController pushViewController: descriptionViewController animé: OUI]; \t [descriptionVersion de ControlController]; – Nathan
Cependant, j'obtiens l'erreur: L'objet ne peut pas être placé - soit la propriété readonly ou aucun setter trouvé. Je sais que ça doit être facile à résoudre, mais je suis un novice en ce moment ... Merci. – Nathan