views:

41

answers:

1

I am trying to make a duplicate of an existing NSManagedObject and related sub-objects in Core Data. I can't seem to find an easy way to do this.

I have an NSArrayController that is populated from a Core Data database. I want to take the object at the selectionIndex and make a deep copy, keeping it related to the same parent object and copying all child objects.

Any assistance is appreciated!

Thanks to TechZen for the link. I used the sample code from that site and used this calling code:

RuleSetVersion *object = [[ruleSetVersionArrayController selectedObjects] lastObject];

NSString *parentEntity = @"RuleSet";

RuleSetVersion *newObject = (RuleSetVersion*)[self copyObject:object toContext:[self managedObjectContext] parent:parentEntity];

[newObject setRuleSetEffectiveDate:[[NSDate alloc] init]];
[newObject setRuleSetVersionLastModifiedDate:[[NSDate alloc] init]];

[newObject setRuleSet:object.ruleSet];

NSError *error;

if ([managedObjectContext save:&error] == NO) {
    [NSApp presentError:error];
}
A: 

It's fairly involved see this answer and the sample code linked from it:

http://stackoverflow.com/questions/2998613/how-do-i-copy-or-move-an-nsmanagedobject-from-one-context-to-another/2999393#2999393

TechZen
Thanks for the response! I see that answer, but it seems to discuss copying an object from one context to another. Does the same answer apply if I want to use only one context?
jschmidt
It turns out that this works, but it took some re-jiggering of my calling code. The URL provides the code to perform the copy, but doesn't really address how to call it appropriately. I'm adding my code in my question above.
jschmidt