2009-11-27 17 views
14

अगर मैं यह सही कर रहा हूं तो मैं उत्सुक हूं।फाइल से पढ़ने पर एनएसईआरआर को संभालना?

NSString *fileContents;  
NSError *fileError = nil; 

fileContents = [[NSString stringWithContentsOfFile:fileOnDisk 
          encoding:NSMacOSRomanStringEncoding 
          error:&fileError] retain]; 

if(fileError != nil) { 
    NSLog(@"Error : %@", [fileError localizedDescription]); 
} 

// Other Code ... 
[fileContents release]; 

संपादित करें (बीबीएमएस टिप्पणियों को प्रतिबिंबित करने के लिए)

NSString *fileOnDisk = @"/Users/Gary/Documents/Xcode/RnD/Maya.MEL"; 
NSError *fileError; // Should this be *fileError = nil; 
NSString *fileContents; 
int  status = 0; 

fileContents = [[NSString stringWithContentsOfFile:fileOnDisk 
          encoding:NSMacOSRomanStringEncoding 
          error:&fileError] retain]; 

if(fileContents == nil) { 
    NSLog(@"FileError: %@", [fileError localizedDescription]); 
    status = 1; 
} else { 
    NSLog(@"Success : %@", fileContents); 
} 

// Clean up 
[fileContents release]; 
[pool drain]; 
return status; 

गैरी

+1

+1 ... आपके नाम – mattblessed

उत्तर

48
NSError *fileError = nil; 
.... 
if(fileError != nil) 
.... 

यह गलत है। आप को फ़ाइल के रिटर्न-बाय-रेफरेंस वैल्यू के बारे में कुछ भी नहीं मानना ​​चाहिए जब तक आप यह जांच न करें कि फाइल सामग्री नील थी या नहीं। कभी नहीं। पास-त्रुटि-दर-संदर्भ विधि को कॉल करने से पहले fileError को शून्य से सेट करना कुछ भी उपयोगी नहीं है।

है यही कारण है, अपने कोड (अब तय हो गई है कि मैं अब और नहीं कर रहा हूँ विमान से विमान को चला रहे हैं और कनेक्शन के बीच में वाईफाई पर हॉपिंग ...) पढ़ना चाहिए:

NSString *fileContents;  
NSError *fileError; 

fileContents = [[NSString stringWithContentsOfFile:fileOnDisk 
          encoding:NSMacOSRomanStringEncoding 
          error:&fileError] retain]; 

if(fileContents == nil) { 
    NSLog(@"Error : %@", [fileError localizedDescription]); 
    // ... i.e. handle the error here more 
    return ...; // often returning after handling the errors, sometimes you might continue 
} 

// Other Code ... 
[fileContents release]; 
+7

बीबीएम, क्या आपका मतलब था 'अगर (फ़ाइल सामग्री == शून्य) {'? –

+5

यह ऐप्पल के दस्तावेज़ में यहां वर्णित है: http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/ErrorHandlingCocoa/CreateCustomizeNSError/CreateCustomizeNSError.html#//apple_ref/doc/uid/TP40001806-CH204-SW2 –

+0

धन्यवाद bbum, मैं देख सकता हूं कि आप कहां जा रहे हैं, और मैं देख सकता हूं कि फ़ाइल को जांचने के लिए अब यह और अधिक समझ में आता है कि नील के लिए सामग्री। हालांकि, क्या यह एक ही अंतर नहीं है, अगर फ़ाइल सामग्री नील है तो आपको केवल एक त्रुटि नहीं मिलती है। बेशक ऐसी स्थितियां हैं जहां फाइल सामग्री नील नहीं है और उनकी एक त्रुटि है। पारितोषिक के लिए धन्यवाद। – fuzzygoat

संबंधित मुद्दे