2009-11-27 6 views
14

Je suis juste curieux de savoir si je fais cela correctement.Gestion de NSError lors de la lecture d'un fichier?

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 (pour refléter les commentaires de 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; 

gary

+1

+1 ... votre nom – mattblessed

Répondre

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

qui est incorrect. Vous ne doit pas supposer quoi que ce soit à propos de la valeur return-by-reference de fileError jusqu'à ce que vous vérifiiez si fileContents était nul. Jamais. Mettre fileError à zéro avant d'appeler la méthode pass-error-by-reference ne sert à rien.

C'est, votre code devrait READ (fixe maintenant que je ne suis plus en cours d'exécution d'un plan à sauter sur et connexion Wi-Fi entre les connexions ...):

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, voulez-vous dire 'if (fileContents == nil) {'? –

+5

Ceci est décrit dans la documentation d'Apple ici: http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/ErrorHandlingCocoa/CreateCustomizeNSError/CreateCustomizeNSError.html#//apple_ref/doc/uid/TP40001806-CH204-SW2 –

+0

Merci bbum, je peux voir où vous allez là-bas, et je peux voir comment il est maintenant plus logique de vérifier le fileContents pour rien. Cependant, n'est-ce pas la même différence, n'obtenez-vous pas seulement une erreur si fileContents est nul. Sauf bien sûr, il y a des situations où fileContents n'est pas nul et leur est une erreur. Merci pour le conseil. – fuzzygoat

Questions connexes