On Jan 3, 2012, at 11:32 PM, Rick Mann wrote:

> I'm working on a Core Data-based CAD app. The schema includes Parts and 
> PartInstances. There is a to-many relationship from Part to PartInstance. The 
> Library contains Parts, but a CAD file contains Parts and PartInstances.
> 
> When the user creates a new PartInstance in a document, I need to copy the 
> Part object from the Library to the document. This is not just a copy from 
> one NSManagedObjectContext to another, it's also a copy from one peristent 
> store to another. That's fine.
> 
> But when the user instantiates a new PartInstance of the same Part again, 
> this time I don't want to copy the Part over, because it already exists. I 
> need a way to determine if the Part object already exists in the document's 
> MOC.
> 
> I can create a UUID of sorts to use, but I'm wondering if I can do something 
> to create the new object (in the new persistent store) with the same objectID 
> as the object from which it's coming. That makes it much easier to then check 
> for the existence of that object in the new store/context before creating it. 
> Note that I have several other entities in the overall schema, and it would 
> be nice not to have to add a uuid to each of those, as well.

There's no way to create an object with the same managedObjectID as an existing 
object in Core Data, by design:  Object IDs are really intended to be unique.

An alternate approach might be to have a Part contain two additional 
attributes: Your own unique ID (such as a UUID), and a "based-on Part" 
attribute that can contain the original Part's unique ID.

So for example, when you put a Part from the library in a document, what really 
happens is:

1. Create a new Part in the document with the same base attributes as its 
original Part.
2. Set the new Part's unique ID to a new UUID.  (This could be part of #1, e.g. 
in awakeFromInsert.)
3. Set the new Part's based-on Part to the library Part's unique ID.
4. Create a new PartInstance in the document referring to the Part in the 
document.

This way a Part in a document can be linked back to its original Part in the 
library, but documents remain self-contained.

For performance, you'll probably want to create an index on both the unique ID 
and the based-on Part ID.

If you add a last-modified-date or generation-number to Part, you can use that 
to detect when you need to propagate changes from the Part in the library to 
the Part in a document.

  -- Chris

_______________________________________________

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