2009-11-27 14 views
14

私はこの権利をしているのか不思議です。ファイルから読み込むときのNSErrorの処理?

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]; 

EDIT(bbumsのコメントを反映)。

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) 
.... 

は、fileContentsがnilであるかどうかを確認するまで、fileErrorの参照による戻り値について何も仮定してはなりません。今までにない。 pass-by-referenceメソッドを呼び出す前にfileErrorをnilに設定すると便利です。

あなたのコードが(...私はもはや平面から平面に実行しているとの接続の間で無線LAN上でホッピングしていた今固定しない)読んでください、次のとおりです。

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

bbum、あなたは 'if(fileContents == nil){'? –

+5

これはAppleのマニュアルに記載されています。http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/ErrorHandlingCocoa/CreateCustomizeNSError/CreateCustomizeNSError.html#//apple_ref/doc/uid/TP40001806-CH204-SW2 –

+0

おかげさまで、あなたはどこに行くのか分かりました。そして、どのようにして、fileContentsがnilであるかをチェックするのがより簡単になります。しかし、それは同じ違いではないのですか?fileContentsがnilの場合にのみエラーが発生しますか?もちろん、fileContentsがnilでなく、それらがエラーである状況がない限り。先端に感謝します。 – fuzzygoat

関連する問題