2009-08-11 16 views
5

Estoy tratando de comprender el significado del valor devuelto por [NSData writeToFile:options:error:]. El método devuelve un BOOL, que según la documentación de Apple es "SÍ si la operación tiene éxito, de lo contrario NO".falla, pero no se devuelve ningún objeto de error. ¿Por qué?

Bastante, pero si es NO, habría supuesto que el parámetro de error se establecería en algún valor de NSError * recuperable. Sin embargo, en los resultados que encuentro, ese no es el caso. En consecuencia, estoy un tanto confundido y no sé cómo determinar qué causó la falla.

A saber, Tengo este código (más o menos):

NSError* error = nil; 
BOOL success = [data writeToFile: filePath error: &error]; 
if (error) 
    NSLog(@"error = %@", [error description]); 

success resulta ser NO en el código que estoy corriendo, pero la declaración NSLog nunca se ejecuta. ¿Cómo?

Howard

Respuesta

14

Es posible que data es nil, en cuyo caso los rendimientos [data writeToFile:error:]nil*error, pero no está establecida.

+3

Eso es exactamente lo que es. Gracias. Nunca me han mordido antes por el hecho de que puede enviar un mensaje al objeto nil; Por fin: ¡ahora me considero un verdadero programador de Objective-C! :-) – hkatz

+1

Que mensajes a objeto nil casi siempre me hace matar un par de horas :) – ColdSteel

0

El método WriteToFile devuelve TRUE en caso de éxito, y en caso de fallo Eso es lo que desea comprobar realmente para.

lo tanto, tratar:

if(!success) 

medida que su condicional en lugar de si (error).

+0

He intentado con éxito == NO, pero en ese caso (y supongo que en el caso de probar también su forma más corta), la instrucción de registro emitida es 'error = (null)'. Eso es lo que no entiendo. – hkatz

+0

IMO para un correcto manejo de errores debe verificar el éxito y el error, si los datos son nulos, no tendrá éxito pero no tendrá ningún error, en este caso debe decirle algo al usuario – ColdSteel

Cuestiones relacionadas