Re: Temporarily disabling autosave
Re: Temporarily disabling autosave
- Subject: Re: Temporarily disabling autosave
- From: Steve Mills <email@hidden>
- Date: Fri, 19 Apr 2013 16:18:37 -0500
On Apr 19, 2013, at 15:42:05, Jerry Krinock <email@hidden>
wrote:
> That's a damned good question, Mike. You're probably thinking that, hey, we lived without any autosaves from 1984 to 2011. What's the big deal? It turns out that you need to be really careful when playing around with an autosave that Cocoa has designated "not implicitly cancellable". Search the internet for:
>
> deadlock in -[NSDocument performActivityWithSynchronousWaiting:usingBlock:]
>
> to see some of the fun that people have had.
>
> I have an app with a requirement similar to Steve's. The app can do long-winded sequences of operations that take tens of seconds, and change the document. So if I honored an autosave request during one these sequences, I'd have to interrupt the operations (which is tricky), save, and then save again at the end after the changes were done.
>
> The solution: Upon receiving a non-cancellable autosave message while other operations are in progress, I stash the completion handler that Cocoa sends in the message, create an operation to "really autosave" later, and add it to my operation queue.
>
> I had to do other stuff to deal with corner cases such as Revert, being in the Versions Browser, etc. Below, I've snipped out a few of the relevant methods from my NSDocument (actually it's NSPersistentDocument, which adds even more to the mess) implementation.
<snip>
Heh, I just happened to run across some part of your previous thread while searching for answers right before your message arrived. :)
Holy carp. That's a lot of complicated stuff to do just to do something as simple as temporarily disable autosave. I appreciate the debugging work it took for you to understand the complexity of what happens when you cancel autosave. I really don't want to add so much complexity to this, when all I'm trying to do is replicate the autosave behavior our app had before moving to Cocoa. Turn it on, pause it during playback, resume it. Piece of pie. I'm going to try a different tactic for now and only come back to this if it doesn't work out. Thanks for the snippets, Jerry!
--
Steve Mills
office: 952-818-3871
home: 952-401-6255
cell: 612-803-6157
_______________________________________________
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