[Résolu] - Ordre des données avec Core Data et NSArrayController

skimpyskimpy Membre
décembre 2011 modifié dans API AppKit #1
Bonsoir,

Je suis en train de faire l'exercice 11 du livre Programmation Cocoa sous OSX qui consiste à  créer une application permettant d'effectuer le suivi des voitures. L'exercice se base sur Core Data avec un NSArrayController et dispose d'une NSTableView dans laquelle apparaissent la marque de la voiture, le prix ...

Lorsque je saisis des entrées, que je ferme l'application et la relance, les entrées saisies n'apparaissent pas dans l'ordre d'origine ; le rendu est même plutôt aléatoire. J'ai cherché et trouvé ces 2 sites :

http://shanecrawford.org/2008/37/sorting-a-coredata-backed-nsarraycontroller/
http://www.timisted.net/blog/archive/core-data-drag-drop/

D'après votre expérience, faut-il ajouter une propriété (index ou order) afin de conserver l'ordre initial ? Faut-il mieux créer une sous-classe de NSArrayController et redéfinir les méthodes ou plutôt utiliser la méthode utilisée sur le timisted ?

Merci.

Réponses

  • jpimbertjpimbert Membre
    05:19 modifié #2
    Il y a une propriété sortDescriptor dans NSArrayController.
  • CéroceCéroce Membre, Modérateur
    05:19 modifié #3
    Les requêtes Core Data renvoient des NSSets (des ensembles), les objets ne sont donc pas ordonnés.
    Il va falloir trier les entrées. Comme tu le supputes, si tu veux classer par ordre de saisie, alors il faut ajouter un attribut ID à  chaque objet; mais tu pourrais aussi choisir de classer par la marque du véhicule, puis le modèle.

    Ne surcharge jamais NSArrayController, c'est trop compliqué (j'ai essayé dans le passé) parce qu'on ne sait pas précisément comment marche chaque méthode. En fait, tu te rendras compte qu'il y a toujours une autre manière de faire. Dans ton cas, utiliser la propriété sortDescriptor comme conseillé par jpimbert.
  • skimpyskimpy Membre
    05:19 modifié #4
    Merci. J'ai suivi vos conseils et ça marche impeccable maintenant !
Connectez-vous ou Inscrivez-vous pour répondre.