2011-08-29 18 views
10

Non riesco a ottenere nsdata per scrivere su un file. Qualche idea su cosa potrei fare storto. Grazie in anticipo.NSData writeToFile non funziona

NSString* filename = @"myfile.txt"; 

NSString *applicationDocumentsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 

NSString *storePath = [applicationDocumentsDir stringByAppendingPathComponent:filename];  

if ([fileManager fileExistsAtPath:applicationDocumentsDir]) 
    NSLog(@"applicationDocumentsDir exists"); // verifies directory exist 

NSData *data = [NSData dataWithContentsOfURL:URL]; 

if (data) {  
    NSString *content = [[NSString alloc] initWithBytes:[data bytes] 
                 length:[data length] encoding: NSUTF8StringEncoding]; 

    NSLog(@"%@", content); // verifies data was downloaded correctly 

    NSError* error; 
    [data writeToFile:storePath options:NSDataWritingAtomic error:&error]; 

    if(error != nil) 
     NSLog(@"write error %@", error); 
} 

continuo a ricevere l'errore

"The operation couldn’t be completed. No such file or directory" 
+6

Non si dovrebbe verificare se 'error' è nullo o no - potrebbe essere inizializzato su qualsiasi cosa (nel tuo caso). Controlla il risultato di 'writeToFile: options: error' per determinare il successo o l'insuccesso. Se restituisce false (NO), solo allora dovresti leggere l'errore. –

+0

Grazie per la risposta. Ritorna NO. Ho rimosso l'assegno per rendere il post il più breve possibile. – user346443

+0

Qual è il valore della variabile storePath prima di chiamare writeToFile: options: error:? Il tuo codice sembra buono, ma l'errore che stai facendo mi fa dubitare di dove punta quel percorso. – Sam

risposta

5

Prova

NSString *storePath = [applicationDocumentsDir stringByAppendingPathComponent:@"myfile.txt"]; 

E

if ([[NSFileManager defaultManager] fileExistsAtPath:storePath]) 
     NSLog(@"applicationDocumentsDir exists"); 
+1

Quindi ha funzionato, strano. Quale sarebbe una stringa diversa da una variabile nsstring. – user346443

+0

Se lo stampi e ha un file: all'inizio è un URL. Mi sono appena imbattuto in questo, anche se mi sto attenendo alle funzioni di stringa. –

+0

fileExistsAtPath restituisce false. Cosa fare? Di causa non esiste perché il file non è ancora stato creato. Come crearlo? – NikeAlive