2012-07-08 8 views
15

Mam modelu danych dla wyścigów Formuły 1 z 3 podmioty:Streszczenie podmioty i dziedziczenie w danych Core

  • RacingActor: abstrakcyjny podmiot
  • Pilot: dziedziczy RacingActor
  • zespołu: dziedziczy RacingActor

enter image description here

Gdybym generować NSManagedObject podklasy do reprezentowania tych podmiotów, kod wygenerowany nie oznacza wcale tym wzorem:

  • Wszystko dziedziczy NSManagedObject
  • Nic nie powstrzymuje mnie od instancji RacingActor
  • Nieruchomość zespół w Pilot jest typu NSManagedObject zamiast zespołu

Czy to jest normalne zachowanie? Czy mam naprawić kod wygenerowany przez Xcode? Czy czegoś brakuje?

BTW Używam Xcode 4.3.3

+0

[To] (http://stackoverflow.com/a/6920736/832111) odpowiedź sprawia mi wierzyć, że jednostka dziedziczenia/abstrakcyjnych jednostek nie jest właściwym wyborem do tego. –

Odpowiedz

10

podstawowe dane na rdzeniu jest obiektem relacyjny biblioteka mapowania. Dawno temu był nazywany Entreprise Object Framework, częścią WebObjects.

Tak, tak, podstawowym obiektem dla każdego odpornego obiektu zarządzanego przez Core Data jest NSManagedObject i możesz robić z nimi, co chcesz.

W przykładzie zespołu i pilot będą dzielić wspólną tabelę, a będziesz w stanie używać kwerend w celu pobrania Drużyny i piloci naraz. To jest pomysł.

drzewo dziedziczenia Objective-C (jeśli używasz niestandardowych klas) może odzwierciedlać model, który zdefiniowany, ale nie musi. Można utworzyć niestandardową klasę RacingActor, użyć jej jako klasy bazowej dla niestandardowych klas Team i Pilot lub można poinformować model, aby używał obiektów RacingActor dla obiektów Team i Pilot. Można nawet zdefiniować całkowicie niezwiązane klasę bazową (pod warunkiem NSManagedObject jest dominująca bezpośrednio lub pośrednio) do Team i/lub Pilot jeśli chcesz.

Jesteś wtedy swobodnie realizować konkretne zachowania, których potrzebujesz w swojej logice biznesowej, zarówno w sterownikach lub w klasach danych niestandardowych.

+5

Proponuję, aby nie robić dziedziczenia w podstawowych danych, chyba że zestaw danych jest bardzo mały. Wydajność bardzo szybko ulega degradacji dzięki dziedziczeniu. Zobacz http://stackoverflow.com/questions/5276369/prevent-core-data-from-combining-entities-into-one-table?lq=1 i http://stackoverflow.com/questions/6917494/core-data wydajność z pojedynczą jednostką nadrzędną? lq = 1. – jjxtra