2012-08-26 11 views
9

मैं एक दस्तावेज़-आधारित कोको ऐप बना रहा हूं जिसमें दस्तावेज़ गतिशील फ़ाइलों का संग्रह है (उपयोगकर्ता फ़ाइलों को जोड़ या निकाल सकते हैं)। विशेष रूप से, सेव एंड ओपन ऑपरेशंस जितनी जल्दी हो सके होना चाहिए।विभिन्न फाइलों से बने NSDocument में NSFileWrapper का उपयोग

यदि मैं दस्तावेज़ीकरण को सही ढंग से समझता हूं, तो मुझे NSFileWrapper का उपयोग करना चाहिए और fileWrapperOfType:error और readFromFileWrapper: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

एक साथ दस्तावेज़ से bits और pieces लाना:

- (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; 
} 
संबंधित मुद्दे