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 (Cocoa-dev@lists.apple.com)

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to