2011-01-10 3 views
2

Je cherche un peu d'aide avec CoreData et avec les entités en général. Pour les fins de ma question, disons que j'ai une base de données d'albums. J'ai simplement une entité nommée albums avec des attributs pour le nom, l'artiste, l'année, l'art d'album, et ainsi de suite. Maintenant, disons que je veux être capable de créer des chansons pour cet album. Je pense que je devrais avoir une entité distincte pour les chansons, et avoir une relation un-à-plusieurs avec elle. Cependant, je ne suis pas sûr exactement comment je ferais cela. Puisque j'ai différents albums qui contiennent des chansons différentes, je veux séparer les chansons de AlbumA de Album B. Maintenant, je pourrais avoir une rangée dans la base de données de chansons pour quel album il appartient, mais est-ce le plus efficace façon de le faire. Que faire si j'ai un nom d'album en double. J'ai essayé de créer un "hash" unique du nom de l'album en utilisant le temps créé et le nom, mais y a-t-il un meilleur moyen.programmation CoreData avec plusieurs entités

J'ai également besoin d'un meilleur moyen de gérer la suppression pour quand un album est supprimé. Sans les relations un-à-plusieurs, j'ai pu créer deux entités distinctes, Albums et Chansons, qui ne sont pas liées entre elles. Cependant, quand je crée un nouvel album, il charge un nouveau viewcontroller et passe le nom de l'album horodaté "hashes" au viewcontroller. Ensuite, lorsque je crée une nouvelle chanson, elle utilise ce nom d'album horodaté comme une ligne dans l'entité Songs. De cette façon, quand je regarde quelles chansons sont dans l'album, je place juste un NSPredicate pour montrer seulement les requêtes qui incluent l'horodatage des hachages. Cependant, la suppression est un problème car il n'y a pas de relations.

  1. Dois-je utiliser une «relation un-à-plusieurs»?
  2. Comment dois-je gérer déterminer si une chanson appartient à un album?
  3. si leur sont plusieurs albums avec le même nom?
  4. Comment gérer la suppression?

Si quelqu'un pouvait fournir des réponses, du code, ou un tutoriel pour l'un de ces ... il serait grandement apprécié.

Répondre

3

Donc, nous espérons que cette brève réponse que vous obtiendrez sur la bonne voie:

une relation one-to-many est approprié pour ALBUM-> chansons. Quant à la façon de le créer - supposons que vous avez deux entités, un appelé "album" et un appelé "chanson". Dans la fenêtre du modèle de données de XCode, sélectionnez votre entité 'album' et créez une nouvelle relation (cliquez sur le bouton + dans la table des propriétés). Donnez un nom à votre relation, décidez si elle est optionnelle ou pas (on supposera que non, puisque chaque album doit contenir au moins une chanson), et sélectionnez "chanson" comme entité de destination. Enfin, cliquez sur la case à cocher "Relation To-Many". Et c'est tout!

Maintenant que vous avez établi une relation, toutes les chansons associées à un album seront supprimées lorsque vous supprimerez l'album lui-même.

Concernant la question 3: "Et s'il y a plusieurs albums avec le même nom". C'est un scénario assez commun. Il serait très inhabituel d'utiliser une chaîne anglaise comme identifiant principal. Vous voulez avoir une sorte d'identifiant unique pour chaque album - ce serait votre clé primaire/unique.Si vous n'êtes pas sûr de ce que cela signifie, vous devriez vous pencher sur des concepts de base de données plus basiques pour mieux le maîtriser avant de passer aux données de base.

+0

Merci beaucoup pour votre réponse. Si j'utilisais une relation To-Many, comment accéderais-je directement aux morceaux de mon album? Existe-t-il une méthode ou un moyen d'utiliser cette relation pour obtenir et définir des données dans l'entité Entity. – Sonny

+0

La relation est une propriété de l'entité - vous pouvez la traiter comme n'importe quelle autre propriété. Vous pouvez obtenir/définir via un NSSet d'objets gérés. Ce guide d'Apple peut vous aider: http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/CoreData/Articles/cdRelationships.html%23//apple_ref/doc/uid/TP40001857-CJBDBHCB – lxt

Questions connexes