2012-07-08 17 views
15

I tienen un modelo de datos para las carreras de Fórmula 1 con 3 entidades:entidades abstractas y herencia en Core Data

  • RacingActor: entidad abstracta
  • piloto: hereda de RacingActor
  • Equipo: hereda de RacingActor

enter image description here

Si genero NSManagedObject subclases para representar estas entidades, el código generado no representa en absoluto este diseño:

  • Todo hereda de NSManagedObject
  • Nada me impide crear instancias de RacingActor
  • La propiedad del equipo en Pilot es de tipo NSManagedObject en lugar del equipo

¿Es este el comportamiento esperado? ¿Se supone que debo arreglar el código generado por Xcode? ¿Me estoy perdiendo de algo?

Por cierto, estoy usando Xcode 4.3.3

+0

[Esta] (http://stackoverflow.com/a/6920736/832111) respuesta me hace creer que la entidad entidad/entidades de resumen no es la elección correcta para eso. –

Respuesta

10

de datos central en el núcleo es una biblioteca de mapeo relacional de objetos. Hace mucho tiempo se llamaba Entreprise Object Framework, parte de WebObjects.

Así que sí, el objeto base para cualquier objeto persistente administrado por Core Data es NSManagedObject, y puede hacer lo que quiera con ellos.

En su ejemplo, Team y Pilot compartirán una tabla común, y podrá usar consultas para recuperar equipos y pilotos a la vez. Esa es la idea.

El árbol de herencia de Objective-C (si usa clases personalizadas) puede reflejar el modelo que definió, pero no es necesario. Puede crear una clase personalizada RacingActor, usarla como clase base para clases personalizadas Team y Pilot, o puede indicarle al modelo que use RacingActor para los objetos Team y Pilot. Incluso puede definir una clase base completamente no relacionada (siempre que sea NSManagedObject es un padre, directa o indirectamente) para Team y/o Pilot si así lo desea.

Usted es entonces libre de implementar los comportamientos específicos que necesita en su lógica comercial, ya sea en controladores o en clases de datos personalizadas.

+5

Sugeriría que no haga herencia en los datos principales a menos que su conjunto de datos sea muy pequeño. El rendimiento se degrada muy rápido con la herencia. Ver http://stackoverflow.com/questions/5276369/prevent-core-data-from-combining-entities- into-one-table?lq=1 y http://stackoverflow.com/questions/6917494/core-data -performance-with-single-parent-entity? lq = 1. – jjxtra