Re: coredata: what's the correct delete rule for ...
Re: coredata: what's the correct delete rule for ...
- Subject: Re: coredata: what's the correct delete rule for ...
- From: Roland King <email@hidden>
- Date: Fri, 5 Feb 2010 14:38:33 +0800
well I set up a little project with coredata and used the XML store .. man that thing is useful.
One thing I was wrong about is that the delete rule on the inverse relationship had to be the same, it doesn't. Don't know why I thought that it had to be.
So I found that the forward rule made lots of sense when deleting my Foo instance, deny denied me deleting a Foo, cascade deleted all the Bars in bars, nullify set the foo property in my Bars to nil (and they then happily failed validation as I wanted). All great.
The reverse however surprised me. Deny worked the same, it stopped anything getting done, but cascade did exactly what I said I didn't want it to do, the delete of one of the Bars in bars deleted the Foo, which then deleted all the other bars in the relationship. What I actually wanted for the reverse relationship was Nullify, which appeared to have the effect of removing the deleted Bar from bars, and leaving all else alone.
On 05-Feb-2010, at 1:35 PM, Roland King wrote:
> I'm on my first foray into CoreData, read the docs, much of it makes more sense than I expected.
>
> I'm just setting up my first data model, it's a fairly standard parent object (call it Foo) and some kiddies (call them Bar). In the modeller I have set up Foo, with a couple of attributes, and Bar, with some too.
>
> I've added a to-many relationship to Foo calls 'bars' with a destination of Bar, then I added the inverse to-one relation to Bar, called foo, so the Foo has it's Bars and the Bars know which Foo owns them. I eventually managed to get the relationships to be inverses.
>
> I'm a bit confused about the Delete rule, even after reading the docs a few times. I understand that there is one delete rule shared by the pair of relationships, as they are inverses of each other.
>
> If the rule is cascade and I delete a Foo, that means all the Bars in bars will be deleted, I get that. What happens if I delete a Bar however? The documentation for 'cascade' says "delete the objects at the destination of the relationship", but I don't want my Foo to be deleted, I want that Bar to be deleted from the bars relationship of the Foo it happens to be related to. Is that what would actually happen, or can I just not delete a random Bar like that and have it just work, do I need to explicitly remove it from the bars relationship of the Foo it's related to, then delete it?
>
> My feeling from reading the "Manipulating Relationships and Object Graph Integrity" is that core data will just do the right thing and in this case 'cascade' on the inverse of a one-to-many relationship doesn't mean delete the object at the other end, it means remove me from the set of objects in that relationship, but I can't see that documented anywhere in that way.
>
> I sure hope that made some sense ... _______________________________________________
>
> 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
_______________________________________________
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