0 votes

trier les résultats bizarres de NSMutableArray avec Core Data

Je me suis penché sur cette question pendant des heures et je n'arrive pas à trouver le problème. J'ai un tableau de scores que je sauvegarde à la fin d'une partie dans un modèle de données de base. Après la sauvegarde, lorsque je retourne dans le contrôleur de vue des meilleurs scores, je charge les scores à partir des données de base et je trie le tableau en utilisant la fonction suivante où le tableau des scores est un NSMutableArray avec mes 10 meilleurs scores

[self.scoresArray sortUsingFunction:firstNumSort context:@selector(totalScore)];

//function to sort high scores in the array
NSInteger firstNumSort(id str1, id str2, void *context) {
    static int counter = 0;

    NSLog(@"counter = %d", counter);
    counter++;
    //NSLog(@"should be sorting");
    int num1 = [str1 totalScore];
    int num2 = [str2 totalScore];
    if (num1 > num2) {
        NSLog(@"%@ is greater than %@", num1, num2);
        return NSOrderedAscending;
    }
    else if (num1 < num2){
        NSLog(@"%@ is less than %@", num1, num2);
        return NSOrderedDescending;
    }
else {
    NSLog(@"%@ is the same as %@", num1, num2);
    return NSOrderedSame;
    }

}

Cela place toujours la dernière entrée de score en haut de la liste, quelle que soit sa valeur ? Ce qui est étrange, c'est que lorsque je redémarre mon application, la même fonction place tous les scores dans l'ordre décroissant correct, ce qui est ce que je veux, mais évidemment je ne veux pas que l'utilisateur doive redémarrer l'application pour voir les scores affichés dans l'ordre correct. Quelqu'un peut-il m'éclairer sur ce qui se passe ?

Merci beaucoup.

Jules

1voto

Jason Jenkins Points 2594

Le seul problème évident que je vois avec votre code est que le paramètre de contexte que vous passez à sortUsingFunction:context (c'est-à-dire le @selector(totalScore) ) n'est pas utilisé par votre fonction et pourrait être remplacé par NULL . Cela n'expliquerait pas le comportement que vous observez et c'est plus une question de style de toute façon. Une autre chose que vous pourriez vouloir vérifier, c'est que le type d'élément totalScore dans vraiment un int . Votre NSLog Les instructions de la fonction de tri traitent les comme s'il s'agissait d'objets (la fonction %@ est le spécificateur de format pour un objet, pour un int vous utiliseriez %d .) Etes-vous sûr que le score total n'est pas en fait NSString ou un NSNumber ? En dehors de cela, la fonction de tri semble devoir fonctionner, et puisque vous dites qu'elle fonctionne au démarrage, je chercherais le problème en dehors de ce code.

Avez-vous vérifié, soit dans le débogueur, soit par le biais d'une NSLog que le tableau est en fait mal trié après l'appel ? Peut-être y a-t-il un bug dans la façon dont vous affichez les scores triés ou quelque chose se passe après le tri pour changer l'ordre ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X