在使用由多个文件组成的NSDocument中使用NSFileWrapper

10
我正在制作一个基于文档的Cocoa应用程序,其中文档是动态的文件集合(用户可以添加或删除文件)。特别是,保存和打开操作应尽可能快
如果我正确理解文档,我应该使用NSFileWrapper并实现fileWrapperOfType:errorreadFromFileWrapper:ofType:error:。然而,我找不到完整的代码示例。我应该如何实现以下方法?
#pragma mark - NSDocument

- (NSFileWrapper *)fileWrapperOfType:(NSString *)typeName error:(NSError **)outError {
    return nil;
}

- (BOOL)readFromFileWrapper:(NSFileWrapper *)fileWrapper ofType:(NSString *)typeName error:(NSError **)outError {
    return YES;
}

#pragma mark - My methods

- (void) addFileToDocumentFromURL:(NSURL*)fileURL {
    // Add a file to the document given the file URL
}

- (void) removeFileFromDocumentWithName:(NSString*)name {
    // Remove a file from the document given the file name
}
1个回答

11

整合来自文档的片段部分

- (NSFileWrapper*) fileWrapperOfType:(NSString *)typeName error:(NSError *__autoreleasing *)outError {
    return self.documentFileWrapper;
}

- (BOOL) readFromFileWrapper:(NSFileWrapper *)fileWrapper ofType:(NSString *)typeName error:(NSError *__autoreleasing *)outError {
    self.documentFileWrapper = fileWrapper;
    return YES;
}

- (void) addFileToDocumentFromURL:(NSURL*)fileURL {
    NSData* fileData = [NSData dataWithContentsOfURL:fileURL];
    NSFileWrapper *fileWrapper = [[NSFileWrapper alloc] initRegularFileWithContents:fileData];
    fileWrapper.preferredFilename = [fileURL lastPathComponent];
    [self.documentFileWrapper addFileWrapper:fileWrapper];
    [self updateChangeCount:NSChangeDone];
}

- (void) removeFileFromDocumentWithName:(NSString*)name {
    NSFileWrapper *fileWrapper = [self.documentFileWrapper.fileWrappers objectForKey:name];
    if (fileWrapper) {
        [self.documentFileWrapper removeFileWrapper:fileWrapper];
        [self updateChangeCount:NSChangeDone];
    }
}

- (NSFileWrapper*) documentFileWrapper {
    if (!_documentFileWrapper) { // New document
        _documentFileWrapper = [[NSFileWrapper alloc] initDirectoryWithFileWrappers:nil];
    }
    return _documentFileWrapper;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接