On 22 Jul 2011, at 19:25, Kevin Perry wrote:

> 
> On Jul 22, 2011, at 9:16 AM, Daniel Vollmer wrote:
> 
>> Hello,
>> 
>> I'm trying to add autosavesInPlace support to my NSDocument-based 
>> Application. It supports a read-only type that is internally converted (as 
>> suggested in 
>> https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Documents/Tasks/FAQ.html#//apple_ref/doc/uid/20000954-1081265-BAJFDEGD)
>>  to my writable type.
>> 
>> The viewer- and editor-roles are set correctly in the application's plist, 
>> +writableTypes also returns only what I can write. For reference, I can read 
>> .txt and read/write .wowplot.
>> 
>> Now, this seems to interact badly with autosavesInPlace: YES. The following 
>> happens:
>> 1) I open a document of the read-only type (.txt)
>> 2) I convert this as suggested above to my writable type, using setFileType 
>> and setFileURL
>> 3) I modify the document
>> 4) I attempt to close the document
>> 5) Now the autosave-Machinery jumps into action and I get the following 
>> error:
>> [ERROR] genstore_storage.c:GSAddPathAsGeneration:980  copyfile 
>> "/Volumes/Seerose/Users/maven/Desktop/110720 225338.wowplot" to 
>> "/Volumes/Seerose/Users/maven/Library/Autosave 
>> Information/2521980F-37BC-4E21-AF6A-001BE638AEFC.genstore.noindex/.genstore_staging/OUyU4Xi/staged"
>>  failed with error 2 (No such file or directory)
>> 
>> The errors make sense, as the file under that name never existed.
>> 
>> Now I'm stuck in-between a rock in a hard place:
>> If I change the type, autosavesInPlace tries to duplicate a non-existent 
>> file (because I modified the fileURL); if I don't change the type, 
>> NSDocument will ask me to write a file of a type I cannot support.
>> 
>> Any ideas?
> 
> 
> There's a tidbit in the AppKit release notes regarding this (Look for "File 
> Type Fixing in -[NSDocument 
> saveToURL:ofType:forSaveOperation:completionHandler:]").
> 
> While it doesn't say it right out, it suggests that you should give 
> responsibility for changing to file URL to NSDocument. All you need to do is 
> change the file type and NSDocument will take care of the file URL and avoid 
> this error. (Note: you won't get this behavior if you're overriding the old 
> -saveToURL:ofType:forSaveOperation:error: method.)

I've given this a go, but it does not seem to work for me. I set the new 
fileType after [super readFromURL:...] is done. Then, when 
- (void)saveToURL:(NSURL *)url ofType:(NSString *)typeName 
forSaveOperation:(NSSaveOperationType)saveOperation completionHandler:(void 
(^)(NSError *errorOrNil))completionHandler
gets called, the arguments are as expected (i.e. the URL is still the original 
file with the "incorrect" extension and the type is the writable type I set 
myself), nevertheless, the URL is never changed and it ends up overwriting my 
original file in the wrong format. :(

Could this be due to me using a NSFileWrapper-based directory package (whereas 
the read-only type is a simple flat-file)?

Thanks,
        Daniel._______________________________________________

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