Re: How to create subentity object inheriting from superentity object in core data
Re: How to create subentity object inheriting from superentity object in core data
- Subject: Re: How to create subentity object inheriting from superentity object in core data
- From: Quincey Morris <email@hidden>
- Date: Wed, 16 Sep 2009 11:22:46 -0700
On Sep 16, 2009, at 10:53, Leon Starr wrote:
I've got a generalization in my core data model with entities named
A, B, C let's say where A is a super class with subentities B and C.
A is not abstract, so if I create an A NSManagedObject, I need to
create and relate a single B or C subclass object. How do I make
this happen? I can create the entities, but HOW do I tell the model
that object B is a subclass of object A (or vice versa?)
Note: I did create the model programmatically and the subentities
have been set properly for entity description "A".
Here's my sad attempt to move forward. As you can see, I've created
the objects I need, but B doesn't know that A is it's superclass
object. What to do?
NSEntityDescription *aEntity = [[model entitiesByName]
objectForKey:@"A"];
NSEntityDescription *bEntity = [[model entitiesByName]
objectForKey:@"B"];
A *newA = [[A alloc] initWithEntity:aEntity
insertIntoManagedObjectContext:context];
B *newB = [[B alloc] initWithEntity:ATC_Entity
insertIntoManagedObjectContext:context];
Now I have poured through all the related docs, and to my repeated
consternation there are a million examples using stupid 1:1 or 1:M
relationships but barely a whisper about programmatic entity
inheritance. Arggh! Appreciate any help or pointers to whatever I
missed in the docs.
I think a little terminology straightening might help you out.
Core Data doesn't have classes, it has entities. It doesn't have
superclasses, it has parent entities. Entities and their parentage are
defined in the Core Data model. If that's all you set up, all your
Core Data objects will be of class NSManagedObject -- they'll all be
the same Objective-C class, even though the entity parentage is
correct and accounted for in Core Data's own data structures.
If you want you Core Data classes to have superclass ancestry to match
their Core Data model parentage, you have to do it yourself. Define a
custom NSManagedObject subclass corresponding to entity A, and define
B and C subclasses of A (which are therefore also subclasses of
NSManagedObject). In the entity descriptions for entities A, B and C,
specify the corresponding class name.
Then, when you create a Core Data object the "normal" way
(insertNewObjectForEntityForName:inManagedObjectContext:), Core Data
will create the object with the correct Objective-C class, and you'll
have the desired superclass ancestry.
Does that help?
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden