2009-11-27 11 views
14

Tengo curiosidad si estoy haciendo esto bien.Manejando NSError al leer desde el archivo?

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 (para reflejar los comentarios 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 ... su nombre – mattblessed

Respuesta

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

Eso es incorrecto. Usted no debe asumir nada sobre el valor de retorno por referencia de fileError hasta que compruebe si fileContents era nulo. Jamas. Establecer fileError a cero antes de llamar al método pass-error-by-reference no sirve de nada.

Es decir, el código debe leer (fijo ahora que ya no estoy corriendo de un plano a otro y saltar sobre WiFi en las conexiones entre ...):

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, ¿quisiste decir 'if (fileContents == nil) {'? –

+5

Esto se describe en la documentación de Apple aquí: http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/ErrorHandlingCocoa/CreateCustomizeNSError/CreateCustomizeNSError.html#//apple_ref/doc/uid/TP40001806-CH204-SW2 –

+0

Gracias bbum, puedo ver a dónde va, y puedo ver cómo ahora tiene más sentido verificar el archivoContenido de nil. Sin embargo, ¿no es la misma diferencia, no solo obtiene un error si fileContents es nulo? A menos que, por supuesto, haya situaciones en las que fileContents no sea nulo y se trate de un error. Gracias por el consejo. – fuzzygoat

Cuestiones relacionadas