On 02/06/2009, at 11:40 AM, Matthew Jeorrett wrote:

I have successfully implemented the NSDocument architecture in my application and have implemented saving and loading documents by overriding the "dataOfType:error:" and "readFromData:ofType:error:" methods. I now want to be able to export my document into a folder selected by the user. The items I will be putting in the folder are a few png images and a plain text file. I have created a new package document type in the build target properties with the role value set as none. The first gap in my knowledge is what the store type should be?

I would guess 'binary' if you're writing out the content yourself. I'm not sure where this setting is used, it doesn't actually seem to make any difference.

I am guessing that I should override the fileWrapperOfType:error: method so that if the type is "document package" I call a method to create a directory file wrapper with the images and text files I want instead of the default behaviour which is to create a file type NSFileWrapper with the data from the "dataOfType:error:" method. I assume that the save panel will have asked the user for a directory as the document type is a package.

Yes - you override -fileWrapperOfType:error: and build your own file wrapper with your package content.

Finally, assuming my approach so far is correct, my last problem is I am unsure of how to add PNG images and a text file to the wrapper. The images are stored as CGImageRefs and the text is in an NSString. If anyone can clear any of this or maybe even all of this up or point me in the direction of an example I would be much obliged.

You need to first get the images/text in the form of NSData representing the file contents. You then add these to the package fileWrapper using the -addRegularFileWithContents:preferredFilename: method



Here's some cut down code from my current project that writes out a package, including Quicklook thumbnails, which is simiar to your situation:

- (NSFileWrapper*) fileWrapperOfType:(NSString*) typeName error: (NSError**) outError
{
NSData* mainContent = [self dataOfType:kDKDrawingDocumentType error:outError];

                if( mainContent == nil )
                {
*outError = [NSError errorWithDomain:kOrteliusErrorDomain code:kOrteliusNoDataErrorCode userInfo:nil];
                        return nil;
                }

NSFileWrapper* fw = [[NSFileWrapper alloc] initDirectoryWithFileWrappers:nil];
                
[fw addRegularFileWithContents:mainContent preferredFilename:@"main_content"];
                
                // add "Quick Look" preview:
                
NSFileWrapper* qlFolder = [[NSFileWrapper alloc] initDirectoryWithFileWrappers:nil];
                [qlFolder setPreferredFilename:@"QuickLook"];
                [fw addFileWrapper:qlFolder];
                [qlFolder release];
                
                // add preview and thumbnail
                
                NSData* preview = [[self drawing] thumbnailData];
[qlFolder addRegularFileWithContents:preview preferredFilename:@"Thumbnail.jpg"];
                
                if( mSavePreview )
                {
                        preview = [[self drawing] pdf];
[qlFolder addRegularFileWithContents:preview preferredFilename:@"Preview.pdf"];
                }
                
                return [fw autorelease];
}

_______________________________________________

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