Meilleure méthode pour avoir une clef en "auto-increment" avec CoreData ?

yoannyoann Membre
01:16 modifié dans API AppKit #1
Bonsoir tout le monde,

Je suis entrain de me replonger dans CoreData après une petite année de séparation due à  l'iPhone et j'aurais besoin pour un des mes ManagedObject d'avoir une clef de type index, qui se met d'elle même à  valeurMax+1 lorsqu'une entity est créée.

Mon idée de base était de me placer dans le awakeFromInsert, de faire une requête sur toutes les entity de ce type et ensuite sur le NSArray résultant faire un valueForKeyPath:@"@max.indexValue" pour obtenir la valeur max actuelle.

Cependant ça ne marche pas comme ça, je récupère un message dans la console disant not key value coding-compliant for the key max.indexValue (sans le @ étrangement). Pourtant si j'affiche le résultat du keyPath indexValue directement j'obtiens bien un tableau avec tout mes index existant !

Avez vous une idée d'où peut venir ce problème ?

D'autre part (et surtout !) avez vous une meilleur solutions que celle-ci ? Charger tous les objet pour les filtrer ensuite ne me plais pas trop, mais je n'ai pas trouvé de méthode pour filtrer et retenir tous les objets ayant la plus grosse valeur sur tel clef avec les NSPredicate

Merci d'avance !

Réponses

  • FloFlo Membre
    01:16 modifié #2
    Je supposes que si tu utilises awakeFromInsert: C'est que tu as une sous-classe de NSManagedObject. Pourquoi ne pas créer une variable de classe contenant la dernière valeur maximale ?

    Il suffit de faire +1 ou -1 dessus à  chaque ajout/suppression, non ?
  • yoannyoann Membre
    01:16 modifié #3
    Parce que je n'y ai pas pensé tout simplement !

    Cependant c'est une méthode bien pour optimiser, mais il me faut quand même récupérer la bonne valeur lors du lancement de l'application, ce qui me ramène à  mon problème de base du not key value coding-compliant for the key max.indexValue
  • FloFlo Membre
    01:16 modifié #4
    Core data n'accepte pas tout les types de NSPredicate, je ne suis pas sûr qu'il soit possible d'utiliser la fonction max, d'ailleurs elle n'est pas proposée dans le predicate builder associé au managed object model...

    A vérifier  :)
  • Paisible.frPaisible.fr Membre
    01:16 modifié #5
    Salut yoann,

    Dans les exemples d'Apple tu as un projet CoreData intitulé "iClass" qui propose un exemple d'implementation de générateur de cle de type index (IDgenerator).

    Y jeter un oeuil d'orientera peut-être...
  • yoannyoann Membre
    01:16 modifié #6
    En effet ! Et c'est d'ailleurs une très bonne méthode !

    Merci bien !
Connectez-vous ou Inscrivez-vous pour répondre.