2010-07-07 7 views
1

J'ai besoin de stocker deux types d'objets, Feed et Folder, dans un tableau de données de base. Par exemple:Comment stocker un tableau mixte dans des données de base

Array 
    Feed 
    Feed 
    Folder 
    Feed 
    Folder 
    Folder 
    …etc... 

Je sais BWOrderedManagedObject pour stocker des objets dans l'ordre dans les données de base, mais je ne suis pas sûr de savoir comment stocker des objets mixtes (le tableau doit être mélangé, puisque les articles sont dans un ordre précis). Idéalement, j'aurais une relation qui pointe vers deux entités, mais évidemment ce n'est pas possible.

La seule solution que je peux voir est de faire de la matrice un attribut Transformable. Cependant, qu'en est-il des objets stockés dans le tableau? Aurai-je besoin de les gérer tous moi-même ou seront-ils encore gérés par Core Data?

Répondre

3

Voilà comment je l'ai fait:

alt text http://gallery.me.com/davedelong/100084/Screen%20shot%202010-07-06%20at%207.22.10%20PM/web.png?ver=12784658050001

AbstractListItem est une entité abstraite qui a la propriété de l'ordre et une relation à un Folder, qui indique parent de l'élément (unique).

Folder est un enfant concret de AbstractListItem qui a un à-plusieurs à AbstractListItem, ce qui signifie que le dossier peut avoir autant d'enfants qu'il veut que sont AbstractListItems (donc soit Folders ou Feeds).

Feeds ne sont pas quelque chose de spécial, sauf qu'ils héritent aussi de AbstractListItem (ce qui signifie qu'ils ont un ordre et un parent, et peut être les enfants d'un Folder).

Donc, une fois que vous avez un dossier, vous pouvez obtenir tous ses enfants pour en faire quelque chose comme:

NSArray * orderedChildren = [[aFolder children] sortedArrayUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"order" ascending:YES]]]; 

Pour obtenir vos articles de haut niveau, vous souhaitez exécuter une recherche de chercher tous AbstractListItem objets où parent = nil.

Questions connexes