मैं अपने पैकेज दस्तावेज़ के लिए NSFileWrapper
का उपयोग कर रहा हूं। कभी-कभी, जब मैं पैकेज के अंदर फ़ाइल के डेटा का अनुरोध करता हूं तो मुझे nil
मिलता है।NSFileWrapper शून्य लौटाता है, कभी-कभी
यह वह जगह है मैं पैकेज के अंदर एक फ़ाइल का डेटा कैसे क्वेरी:
- (NSData*) dataOfFile(NSString*)filename {
NSFileWrapper *fileWrapper = [self.documentFileWrapper.fileWrappers objectForKey:filename];
return fileWrapper.regularFileContents; // This returns nil sometimes. Why?
}
इस विधि अंत में कुछ फाइलें (सभी नहीं) के लिए शून्य लौटने शुरू होता है। अफसोस की बात है, मैं लगातार समस्या को पुन: उत्पन्न करने में कामयाब नहीं रहा हूं।
- (BOOL) readFromFileWrapper:(NSFileWrapper *)fileWrapper ofType:(NSString *)typeName error:(NSError *__autoreleasing *)outError {
self.documentFileWrapper = fileWrapper;
return YES;
}
यह मैं पैकेज के अंदर एक फ़ाइल के डेटा को अपडेट है:
- (void) updateFile:(NSString*)filename withData:(NSData*)data {
SBFileWrapper *fileWrapper = [self.documentFileWrapper.fileWrappers objectForKey:filename];
if (fileWrapper) {
[self.documentFileWrapper removeFileWrapper:fileWrapper];
}
NSFileWrapper *fileWrapper = [[SBFileWrapper alloc] initRegularFileWithContents:data ];
fileWrapper.preferredFilename = filename;
[self.documentFileWrapper addFileWrapper:fileWrapper];
}
यह मैं कैसे को बचाने के है
मामले में यह मदद करता है में, यह मैं कैसे पैकेज को खोलने है पैकेज:
- (NSFileWrapper*) fileWrapperOfType:(NSString *)typeName error:(NSError *__autoreleasing *)outError {
return self.documentFileWrapper;
}
यह क्यों हो सकता है? क्या इसे रोकने का कोई तरीका है?
regularFileContents
के प्रलेखन इस समस्या के बारे में बात करने के लिए प्रकट होता है:
This method may return nil if the user modifies the file after you call readFromURL:options:error: or initWithURL:options:error: but before NSFileWrapper has read the contents of the file. Use the NSFileWrapperReadingImmediate reading option to reduce the likelihood of that problem.
लेकिन मुझे समझ नहीं आता क्या कोड में परिवर्तित करने की ऊपर इस स्थिति को रोकने के लिए है।
विफल प्रयोगों
मैं दस्तावेज़ को सहेजने अगर regularFileContents
वापसी शून्य लेकिन यह अभी भी बाद में नहीं के बराबर रिटर्न की कोशिश की। इस तरह:
- (NSData*) dataOfFile(NSString*)filename {
NSFileWrapper *fileWrapper = [self.documentFileWrapper.fileWrappers objectForKey:filename];
NSData *data = fileWrapper.regularFileContents;
if (!data) {
[self saveDocument:nil];
fileWrapper = [self.documentFileWrapper.fileWrappers objectForKey:filename];
data = fileWrapper.regularFileContents;
}
return data;
}
यह एक पागल अनुमान है, लेकिन मुझे आश्चर्य है अगर सुर्खियों फ़ाइल को संशोधित करने के बाद आप को बचाने (यह फ़ाइल या कुछ और reindexes) की तरह जिम्मेदार बताते हैं? मैं थोड़ी उत्सुक हूं कि आप विफल होने के बाद क्यों बचत कर रहे हैं; इसके बजाए इसे दोबारा क्यों नहीं खोलें? कोशिश करने और आपको कुछ विचार देने के लिए बस अनुमान लगाया। – Dad
जंगली अनुमान, लेकिन मुझे लगता है कि आपकी वस्तु जारी हो जाती है। शायद आवंटन के साथ कुछ गलत हो जाता है। क्या आपने विश्लेषण का प्रयास किया? आवंटन और init (और स्वयं। + Autorelease और रिलीज) के साथ सावधान रहें। – Roger