Core Data: Qui joue le rôle du NSDictionaryController?

Bonjour,



Je fais mes premiers pas avec Core Data -- génial mais pas vraiment évident...



Par exemple, le stockage de données répétées, et leur gestion dans l'interface ne demande pratiquement pas de code. L'arrayController s'occupe de tout.



Maintenant, je souhaiterais stocker l'équivalent d'un NSMutableDictionary dans mon document. Avec NSArchiever ça ne posait aucun problème; avec Core Data c'est différent. Pas moyen de déclarer un NSDictionaryController comme entité, ou du moins pas encore.



Allors comment faire? J'ai eu l'idée suivante, mais elle me paraà®t un peu saugrenue: J'utilise un NSArrayController avec un unique enregistrement. Je vérifie d'abord si le contenu du contrôleur est vide, et si oui je crée un enregistrement, c'est juste une ligne de code: [myArrayController add:self]. Cet enregistrement unique a toutes les caractéristiques d'un dictionnaire.



N'empêche, ça me parait être du bricolage. Existe-t-il une meilleure solution?
Mots clés:

Réponses

  • CéroceCéroce Membre, Modérateur
    NSObjectController.
  • berfisberfis Membre
    juillet 2012 modifié #3
    Eh bien voilà .



    Merci Céroce.



    J'ajoute une autre question: s'il m'était facile de vérifier si le NSArrayController ne contenait pas d'enregistrement et d'en créer un unique, comment faire la même chose avec un NSObjectController?



    Pour l'instant, il s'agit une entité avec 3 attributs. Ces attributs ont-ils été définis dans le document? Si je teste l'existence de l'entité, la réponse sera VRAIE à  chaque fois: l'entité est créée en tant que modèle (classe) par Core Data. Mais cette classe a-t-elle été instanciée, autrement dit existe-t-il un enregistrement "physique" dans le document? Si je teste la valeur d'un attribut/propriété, le code plante si l'instanciation n'a pas eu lieu, c'est donc une mauvaise idée.



    Je rappelle l'idée: l'entité est facultative. Si l'utilisateur décide de l'utiliser, je dois la créer si elle n'existe pas, ou utiliser l'objet défini s'il existe déjà . Il faut aussi pouvoir le supprimer (une re-création avec les valeurs par défaut étant possible): en fait, exactement l'équivalent (en plus propre) de mon enregistrement unique avec le NSArrayController.
  • berfisberfis Membre
    juillet 2012 modifié #4
    Et la réponse est:


    if ([myObjectController content]) {...
    


    Moi aussi je suis content. Sauf qu'avec Core Data, il faut être prudent: mieux vaut "fetcher" explicitement d'abord, histoire d'être sûr:


    [color=#8262b9][color=#000000][[/color][color=#548187]myObjectController[/color][color=#000000] [/color][color=#8e372e]fetchWithRequest[/color][color=#000000]:[/color][color=#c10611][b]nil[/b][/color][color=#000000] [/color][color=#8e372e]merge[/color][color=#000000]:[/color][color=#c10611][b]NO[/b][/color][color=#000000] [/color][color=#8e372e]error[/color][color=#000000]:[/color][color=#c10611][b]nil[/b][/color][color=#000000]];[/color][/color]
    




    Pas compètement "clés en main", ce Core Data...
Connectez-vous ou Inscrivez-vous pour répondre.