I’m having some issues with concurrency with Core Data. I create an object
that has a to-many relationship with another object (which in turn has a
to-one reciprocal relationship with the first object), then dispatch_async
onto a private queue. In that queue, I use a separate managed object
context, which I’ve created earlier and only use within that queue. Here’s a
snippet:

ParentObject *parent = [NSEntityDescription
insertNewObjectForEntityName:@"ParentObject"]
inContext:[self moc]];

NSManagedObjectID *objectID = [parent objectID];

dispatch_async(dedicatedQueue, ^{
// Note: childContext is an NSManagedObjectContext that has been created
earlier and is only used within this queue.
 ParentObject *parent = [childContext objectWithID:userID];

for (NSDictionary *jsonDict in allChildDicts) {
 ChildObject *child = [NSEntityDescription
insertNewObjectForEntityName:@"ChildObject"]
inContext:childContext];
[parent addChildObject:child];
 }
});


If I try to save the context within the dedicated queue, I get validation
errors on the child objects with the text “Dangling reference to an invalid
object.”

It appears to work correctly if I create the parent object within the
dedicated child queue. So, what is the proper way to create these objects on
the main queue and then update them in the background? Thanks in advance.

Jeff Kelley
_______________________________________________

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