Hi Ken,

Many thanks for your response... Hmm, I think you're right. I overrided 
-saveDocument: because it looked as though -writeToURL: and all of the other 
-write... methods expected you to write all the data at any one time. It's 
possible for my file packages to run to hundreds of megabytes, so I only ever 
want to write the changed files at any save point (usually only ever one or two 
RTFD files within the package actually require saving at any one time). There's 
not much in the docs about doing this - everything I can find seems to assume 
that you will save everything, even when it comes to packages (as file 
wrappers), at once, which is why I took a screwy way. I still wonder what the 
best way of doing it is. 
-writeToURL:ofType:forSaveOperation:originalContentsURL:error: perhaps?

Also, is it possible that -writeToURL: is getting called behind the back of 
-saveDocument:? I considered this but assumed (always a bad mistake) that it 
would be safe as I thought that all of the -write... methods did nothing unless 
you overrode them.

Many thanks again.

All the best,
Keith

P.S. I've updated the thread title to better reflect the problem.

----- Original Message ----
From: Ken Thomases <[EMAIL PROTECTED]>
To: Keith Blount <[EMAIL PROTECTED]>
Cc: cocoa-dev@lists.apple.com
Sent: Wednesday, May 7, 2008 4:03:23 PM
Subject: Re: Deep sleep and file wrappers?

I don't have experience with NSDocument-based applications, so take  
the following with a grain of salt...

On May 6, 2008, at 1:27 PM, Keith Blount wrote:

> I have an application that saves its information as a file package.  
> My NSDocument subclass overrides -saveDocument: to save individual  
> files within the project folder (because there can be hundreds of  
> files and I wouldn't want to save the whole file wrapper every time  
> a single file is changed).

>From the docs, this doesn't seem like the right way to customize  
saving.  Overriding -saveDocument: may catch some cases of save  
attempts, but I suspect there are other times when other methods are  
invoked directly.  This document describes what you need to override  
to customize how the document is saved:

http://developer.apple.com/documentation/Cocoa/Conceptual/Documents/Tasks/SubclassNSDocument.html


> I never got to the bottom of the issue, and now another user has  
> reported the same thing. To recap: whilst my app was open, the  
> user's computer went into deep sleep (this was the case with the  
> first two users; the third user cannot remember the exact  
> circumstances but says his computer has had deep sleep problems  
> recently). When it came out of deep sleep, everything in the  
> project's file wrapper - that is, everything in the folder-with- 
> extension on disk - had been wiped. All that was in there were the  
> few files that were auto-saved _after_ deep sleep.

I can think of two possibilities:

1) some other method was invoked to save the document, but since you  
didn't override it, it produced an empty document.  The framework then  
replaced the existing document on disk with the new empty document.

2) The framework sometimes juggles files to perform an "atomic"  
document save operation.  The writing methods of NSDocument are told  
to write to a different, temporary location, then the original and the  
newly saved document are swapped, then the backup is removed (unless - 
keepBackupFile is overridden to return YES).  If this happens in your  
case, the new document will not be complete because of the way you're  
only saving part of the document.


Good luck finding and fixing the problem,
Ken



      
____________________________________________________________________________________
Be a better friend, newshound, and 
know-it-all with Yahoo! Mobile.  Try it now.  
http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ
_______________________________________________

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 [EMAIL PROTECTED]

Reply via email to