2012-08-26 5 views
9

나는 문서가 동적 파일 모음 (사용자가 파일을 추가 또는 제거 할 수 있음)으로 문서 기반 코코아 응용 프로그램을 만들고 있습니다. 특히 저장 및 열기 조작은 가능한 한 빨리이어야합니다.다양한 파일로 구성된 NSDocument에서 NSFileWrapper 사용하기

설명서를 올바르게 이해하면 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 
} 

답변

10

문서에서 함께 bitspieces 퍼팅 :

- (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; 
}