2009-08-11 4 views
5

Sto cercando di capire il significato del valore restituito da [NSData writeToFile:options:error:]. Il metodo restituisce un BOOL, che secondo la documentazione di Apple è "SÌ se l'operazione ha successo, altrimenti NO".non riesce, ma non viene restituito alcun errore. Perché?

Abbastanza corretto, ma se è NO, avrei presupposto che il parametro di errore sarebbe stato impostato su un valore NSError * recuperabile. Tuttavia nei risultati che sto incontrando, non è questo il caso. Di conseguenza sono un po 'confuso e non so come determinare cosa ha causato il fallimento.

Vale a dire, ho questo codice (più o meno):

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

success risulta essere NO nel codice Io corro, ma la dichiarazione NSLog non viene mai eseguito. Come mai?

Howard

risposta

14

E 'possibile che data è nil, nel qual caso i rendimenti [data writeToFile:error:]nil, ma *error non è impostato.

+3

Questo è esattamente quello che è. Grazie. Non sono mai stato morso prima dal fatto che è possibile inviare un messaggio all'oggetto nil; Finalmente: ora mi considero un vero programmatore Objective-C! :-) – hkatz

+1

Quel messaggio a nil oggetto mi fa quasi sempre ammazzare un paio d'ore :) – ColdSteel

0

Il metodo writeToFile restituisce TRUE in caso di successo e FALSE in caso di fallimento -che cosa si desidera controllare in realtà per.

Quindi, cercare:

if(!success) 

Mentre la vostra condizione, invece di se (errore).

+0

Ho provato il successo == NO, ma in tal caso (e presumo anche nel caso di provare il tuo modulo più breve), l'istruzione del registro emesso è 'error = (null)'. Questo è quello che non sto capendo. – hkatz

+0

IMO per una corretta gestione degli errori dovresti controllare sia il successo che l'errore, se i dati sono nulli, non avrai successo ma non avrai errori, in questo caso dovresti dire qualcosa all'utente – ColdSteel