NSDocument to hold a complete folder?

前端 未结 1 684
感动是毒
感动是毒 2021-02-02 02:55

I ask sorry if this argument has already been covered, but after some research i found nothing precise.

I need to make a document based application, where the document

相关标签:
1条回答
  • 2021-02-02 03:14

    You can use NSFileWrapper as a package directory in document-based applications.

    In your application Info.plist file, state that your document type is a package or bundle (key LSTypeIsPackage with value YES).

    In your NSDocument subclass, implement the following methods for reading and writing. In this example, I’m assuming the corresponding model instance variables are pdfData and signatureBitmapData, which are stored in the package directory under MainDocument.pdf and SignatureBitmap.png, respectively.

    - (BOOL)readFromFileWrapper:(NSFileWrapper *)dirWrapper
                         ofType:(NSString *)typeName
                          error:(NSError **)outError
    {
    
        NSFileWrapper *wrapper;
        NSData *data;
    
        wrapper = [[dirWrapper fileWrappers] objectForKey:@"MainDocument.pdf"];
        data = [wrapper regularFileContents];
        self.pdfData = data;
    
        wrapper = [[dirWrapper fileWrappers] objectForKey:@"SignatureBitmap.png"];
        data = [wrapper regularFileContents];
        self.signatureBitmapData = data;
    
        …
    
        return YES;
    }
    
    - (NSFileWrapper *)fileWrapperOfType:(NSString *)typeName
                                   error:(NSError **)outError
    {
        NSFileWrapper *dirWrapper = [[[NSFileWrapper alloc]
            initDirectoryWithFileWrappers:nil] autorelease];
    
        [dirWrapper addRegularFileWithContents:self.pdfData
            preferredFilename:@"MainDocument.pdf"];
    
        [dirWrapper addRegularFileWithContents:self.signatureBitmapData
            preferredFilename:@"SignatureBitmap.png"];
    
        …
    
        return dirWrapper;
    }
    

    From the user perspective, the package directory shows up in Finder as if it were a single file, much like Xcode .xcodeproj directories or application bundles.

    0 讨论(0)
提交回复
热议问题