2010-06-18 10 views
0

Je travaille sur une application où j'ai des produits que je télécharge dans une liste. Les produits téléchargés sont affichés dans un tableau et chaque testament affiche une vue détaillée avec plus d'informations.Aide à la mise en oeuvre ... Sous-classe NSManagedObject?

Ces mêmes produits peuvent être sauvegardés en tant que favoris, et pour cela j'utilise des données de base. J'aimerais pouvoir réutiliser un grand nombre de vues pour afficher les produits, ce qui signifie que l'objet store et l'objet téléchargé doivent être du même type.

Maintenant, comment je ferais mieux d'implémenter les objets? Puis-je faire une classe comme celle-ci:

FavoriteProduct: NSManageObject // mise en œuvre

et sous-classe

produit: FavoriteProduct // mise en œuvre

?

La classe CD ne me donne pas tout. Quel serait le meilleur moyen de fusionner ces deux classes d'objets, donc j'ai aussi peu de travail devant moi en termes de mise en œuvre des différentes vues pour chaque objet? Fondamentalement, je veux juste pouvoir appeler les mêmes méthodes, etc. sur les objets Product que sur ceux qui sont des objets FavoriteProduct, et réutiliser les vues pour les deux types. Il y a seulement un peu de différence entre les deux (l'un est bien sûr stocké en tant que favori et a des valeurs supplémentaires telles que des notes, des balises, tandis que le produit ne le fait pas).

Merci à l'avance

Répondre

0

J'ai eu la même question il y a un certain temps. Réponse rapide: vous ne pouvez pas instancier une sous-classe NSManagedObject sans contexte, donc utiliser un NSManagedObject comme super classe pour quelque chose qui ne va pas être sauvegardé (puisqu'il est juste vu depuis le réseau), n'est probablement pas une bonne idée.

Donc, pour votre cas:

  • FavoriteProduct doit être une sous-classe de NSManagedObject
  • Par conséquent produit (super classe de FavoriteProduct) doit être une sous-classe de contexte NSManagedObject trop
  • Mais il a à créer avec un contexte, pas bon

En guise de solution de contournement, vous pouvez avoir un "faux"/contexte temporaire pour les objets de type Product mais pas FavoriteProduct et do e hiérarchie la façon dont vous avez décrit (ce qui semble un peu hacky pour moi)

Une autre solution possible est d'avoir cette hiérarchie:

  • Produit: NSObject (ou autre)
  • FavoriteProduct: Produit
  • StoredProduct: NSManagedObject

Il ce cas, mettre en œuvre toutes vos méthodes sur le produit/FavoriteProduct comme d'habitude, et ont des liaisons de FavoriteProduct à StoredProduct (c'est à dire.vous pouvez avoir une propriété « storedProduct » sur votre FavoriteProduct qui sera utilisé pour mettre à jour CoreData chaque fois que certaines des propriétés sur FavoriteProduct sont changées)

Je serais curieux de voir ce que les autres font dans ce genre de situations