2009-12-07 13 views
19

¿Hay alguna forma de obtener datos de error más detallados de "createFileAtPath" Esperaba un NSError? Actualmente estoy usando el valor de retorno BOOL.Error más detallado de createFileAtPath?

success = [fileMan createFileAtPath:fileOnDisk contents:dBuffer attributes:nil]; 
if(success == YES) NSLog(@"FileCreated"); 
else { 
    NSLog(@"ERROR: Failed to create file"); 
    return 1; 
} 

Gary

Respuesta

54

Estoy de acuerdo ... Me gustaría tener una función para que acepte esta NSError!

Los errores devueltos en este caso suelen ser uno de los errores POSIX declarados en errno.h (errno se incluye automáticamente como parte de los encabezados Cocoa o Foundation).

para ver el error, utilice la función strerror de errno.h y hacer referencia al errno número entero global, que es fijado por el POSIX de bajo nivel io funciones cuando se produce un problema:

if (![fm createFileAtPath:@"/etc/foobar.txt" contents:data attributes:nil]) 
{ 
    NSLog(@"Error was code: %d - message: %s", errno, strerror(errno)); 
} 

// output will be: Error was code: 13 - message: Permission denied 

La lista de código de error las constantes se enumeran en el en el Error Handling Programming Guide for Cocoa (además del encabezado errno.h en sí).

+0

perfecto, muchas gracias ... – fuzzygoat

+0

Esta respuesta es enorme. ¡Inteligente! –

9

Se supone que no debes usar ese método; olvidaron poner esto en los documentos principales (!), pero si lee el archivo de encabezado de Apple, encontrará este comentario:

/* Estos métodos se proporcionan aquí para compatibilidad. Los métodos correspondientes en NSData que devuelven NSErrors deben considerarse como el método principal para crear un archivo desde un NSData o recuperar los contenidos del de un archivo como un NSData. */

Así que, en cambio, Apple espera que usted utilice este (que, a partir de las pruebas, parece que funciona exactamente de la misma - a excepción de que se encuentra en una clase extraña en el que nunca pensaría que buscarlo (quiero crear un archivo vacío ... así que tengo que ... una instancia de un objeto nulo NSData lo) que tiene un objeto NSError):??

https://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/Classes/NSData_Class/Reference/Reference.html#//apple_ref/occ/instm/NSData/writeToFile:options:error:

Cuestiones relacionadas