Petit souci de design avec Core Data

Salut à  tous, je me confronte à  un petit problème et je ne vois pas comment le résoudre. J'utilise Core Data dans mon application. Pour faire simple, j'ai isolé une partie de mon modèle de données:



screenshot20120706at144.png





Une collection est composée d'articles, et un article peut être présent dans plusieurs collections. Ce que je voudrais, c'est pouvoir avoir un attribut "display_order" pour chaque article en fonction da la collection ou il se situe. Le même article peut donc être dans une collection A avec un display order de 1 et dans une collection B avec un display order de 15. Je suis sûr qu'une solution simple existe, mais là , je ne vois pas !



Merci à  vous.

Réponses

  • CéroceCéroce Membre, Modérateur
    Peut-être faut-il créer une nouvelle entité comprenant un attribut display_order, avec l'article et la collection qui pointent dessus.

    J'avoue ne pas bien savoir non plus.
  • Le plus simple est de créer une entité intermédiaire CollectionOrder composée de :
    • une relation (1,n) vers article
    • une relation (1,n) vers collection
    • un attribut index qui définit l'ordre de l'article dans la collection


    Une solution plus élégante mais plus complexe consisterait à  dériver NSManagedObject pour la collection, et stocker l'ordre des articles dans un attribut NSData.
  • Merci, effectivement cela semble etre la solution a adapter, en décortiquant la doc de Core Data je suis tombé sur:
    For this sort of relationship, you should use an intermediate (“join”) entity. An advantage of the intermediate entity is that you can also use it to add more information to the relationship"for example a “FriendInfo” entity might include some indication of the strength of the friendship with a “ranking” attribute.
  • FKDEVFKDEV Membre
    juillet 2012 modifié #5
    Si tu vises iOS 5 ou plus, tu peux avoir des relationships ordonnées qui se traduisent par des NSOrderedSet dans le code.

    Il y a juste une case "ordered" à  cocher.
  • Bonjour,


    Tel que ton modèle est conçu, tu ne peux effectivement rien faire. Il faut passer par le "joint" décrit par la doc.


     


    @jpimbert : pourquoi un attribut NSData? "Transformable" fonctionne pour une NSArray, ainsi que pour NSAttributedString, NSImage, NSSound... mais je n'ai pas trouvé de doc à  ce sujet. Pour moi ça a juste été une bonne surprise.


     


    @FKDEV: je n'ai jamais utilisé de NSOrderedSet (qui ne dérive pas de NSSet, d'alleurs). C'est bien?


  • La solution aujourd'hui c'est les relations ordonnées, et ça marche plutôt bien.


  • berfisberfis Membre
    juillet 2013 modifié #8

    Et le content du contrôleur, on le met à  quoi? Content Set? Content Array? As-tu les références WWDC par hasard?


     


    Oups, j'oubliais... on est sur iOS, pas de bindings donc... Laissez tomber.


  • Pour répondre quand même à  la question, je me suis fais un NSValueTransformer qui adapte le NSOrderedSet en NSArray pour que ça reste compatible avec les bindings.


Connectez-vous ou Inscrivez-vous pour répondre.