2012-08-26 12 views
9

Belgenin dinamik bir dosya koleksiyonu olduğu (dosyalar kullanıcılar ekleyebilir veya kaldırabilir) belge tabanlı bir Cocoa uygulaması yapıyorum. Özellikle, Kaydet ve Aç işlemleri olabildiğince hızlı olmalıdır.NSDocument öğesinde NSFileWrapper öğesinin çeşitli dosyalardan yapılmış olması

Belgeleri doğru anlıyorsam, NSFileWrapper kullanmalı ve fileWrapperOfType:error ve readFromFileWrapper:ofType:error:'u kullanmalıyım. Ancak, tam bir kod örneği bulamıyorum. Aşağıdaki yöntemleri nasıl uygulamalıyım?

#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 
} 

cevap

10

belgelerine birlikte bits ve pieces koymak:

- (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; 
} 
İlgili konular