Re: What does core data do during a Save As?
Re: What does core data do during a Save As?
- Subject: Re: What does core data do during a Save As?
- From: Gideon King <email@hidden>
- Date: Sat, 2 Oct 2010 04:28:20 +1000
Aargh!!! That is just so totally broken, if it can't handle a scenario like that.
I'm not sure that this is my problem though. I do have a parent/child relationship, and I am seeing the problem on a number of relationships on the parent entity and one relationship on the child entity, but also on one relationship that involves two entities that do not have any parents/children.
The only thing in common is that all the broken relationships are one to one and have an inverse, and as far as I can see, the validation failures are happening for *every* two way one-to-one relationship in my model. One way to-one relationships are OK. To-many relationships are OK. Just about all the relationships that are now having problems used to be one way, and I used to be able to Save As before (I wish there was a way to do a diff on models so I could easily see what had changed in the various checkins).
Removing Save As really isn't an option. This is a document based application, and needs to have the basic document handling functions like save as. Reworking the model to not have parent entities would make things pretty messy, but given the investment I have already made in trying to tame Core Data, if I need to do that, I guess I could give it a go.
The next thing I'm dreading with Core Data is trying to get autosave to work. I got some tips from Ben Trumbull, but it looks like a scary amount of work that I don't fully understand...but that's for another day...
If there are any further suggestions as to how to debug this, I'm all ears.
Regards
Gideon
On 02/10/2010, at 3:44 AM, Quincey Morris wrote:
> On Oct 1, 2010, at 09:03, Gideon King wrote:
>
>> Hi, I'm still trying to sort out what is happening to my to-one relationships during a Save As operation (see Core data: Inverse relationships with subclasses thread for context if necessary, but this really is a standalone thread now) - it turns out that the subclasses/subentities questions were a bit of a red herring and it applies to all to-one relationships with inverse relationships. I have narrowed it down to the following:
>>
>> 1. Prior to saving I manually go through all the registered objects and make sure they pass the validateForInsert and validateForUpdate checks. This confirms that everything is OK before saving.
>> 2. The Save As operation creates a new atomic store, and loads from an empty temporary file.
>> 3. It then does a migration to the new atomic store. I really don't understand this process, but somewhere along the way, it calls awakeFromFetch on all my existing managed objects (even though as far as I can tell, no fetches have been done, and certainly no new atomic store cache nodes have been created).
>> 4. It then validates my managed objects, and this time the insert validation checks fail for all my to-one relationships that have inverse relationships.
>
> Well, I'm not sure I understand all the factors in your scenario, but it's known that Core Data implements Save As as a migration process using a mapping model that it constructs on the fly, and that this fails for models that have parent entities -- specifically when the parent entities contain relationships. It sounds a bit like this is what's happening to you.
>
> The last time I tried doing this was under Leopard, and in the end I gave up trying to get Save As to work reliably. Whether the situation is improved in Snow Leopard, I don't know. Whether there's a general solution or workaround, I don't know.
>
> Here are some alternatives you might like to consider:
>
> 1. Take the "Save As" item off your "File" menu. (Seriously.)
>
> 2. Re-work your data model to not use parent entities. To get the kind of object graph you want, you may still need to use an auxiliary entity to represent the relationships, but just not a parent entity.
>
>
_______________________________________________
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