2009-06-15 10 views
17

Sto provando a caricare un file in una stringa. Ecco il codice che sto utilizzando:NSString stringWithContentsOfFile in errore con quello che sembra essere il codice di errore errato

NSError *error = nil; 
NSString *fullPath = [[NSBundle mainBundle] pathForResource:filename 
                ofType:@"html"]; 
NSString *text = [NSString stringWithContentsOfFile:fullPath 
              encoding:NSUTF8StringEncoding 
               error:&error]; 

Quando viene passato in @ "circa", come il nome del file, funziona assolutamente bene, mostrando il codice funziona. Quando viene passato in @ "eula" come nome file, fallisce con "Errore Cocoa 258", che si traduce in NSFileReadInvalidFileNameError. Tuttavia, se scambio il contenuto dei file ma mantengo i nomi uguali, l'altro file non riesce a dimostrare che non c'è niente di sbagliato nel nome del file, è qualcosa che ha a che fare con il contenuto.

Il file about è un codice HTML abbastanza semplice, ma il file eula è un enorme pasticcio esportato da Word dal dipartimento legale.

Qualcuno sa qualcosa all'interno di un file HTML che potrebbe causare l'aumento di questo errore?

Molto grazie,

Sam

risposta

8

L'errore è quasi certamente che il tuo file non è in UTF-8, ma hai ragione, sembra un bug nel rapporto di errore.

Aprire il file eula con BBEdit (o TextWrangler libero) e vedere quale codifica utilizza. Cambia la codifica in UTF-8 e salvala. Diff i due file per vedere quali differenze sono apparse. Sostituisci il file originale con quello nuovo (risolvendo eventuali problemi).

Se ciò risolve il problema, utilizzare Apple Bug Reporter per segnalare il bug nel report degli errori.

3

La ragione più probabile che +stringWithContentsOfFile:encoding:error: sarebbe fallire in questo caso sarebbe se hai fornito la codifica sbagliata. Sei sicuro che il tuo file @"eula" è codificato UTF8?

Se non si è certi della codifica del file, è sempre possibile provare +stringWithContentsOfFile:usedEncoding:error: e vedere se funziona e quale codifica viene visualizzata.

10

Ho appena trascorso 45 minuti con questo problema, solo nel mio caso la soluzione era stupido e il problema leggermente diverso.

  • Avevo un file denominato Playlist.txt nella directory delle risorse. Stava caricando bene.
  • Il file è stato modificato in un punto, dall'interno di XCode.
  • Il file ha smesso di caricarsi correttamente, con lo stesso errore di sopra. Tuttavia, non è mai stato spostato né il suo tipo di codifica è stato modificato.
  • Ho fatto un comando-I (Ottieni informazioni) sul file nella directory XCode, mi ha detto che era UTF-8 (come previsto).
  • Ho provato il metodo "usedEncoding" per leggere i file, senza dadi. Stesso errore, la codifica è stata restituita null.
  • Infine, ho cancellato il file da XCode, l'ho trascinato di nuovo e ho fatto un Clean All. Questo ha risolto il problema.

Questa non è la prima volta che XCode memorizza magicamente le cose (erroneamente) mi ha causato ore e ore di tempo sprecato.Se hai un errore del genere che non ha senso, prova a rimuovere e sostituire i file e a pulire tutti i bersagli.

0

Non so se questo è il tuo problema, ma ho appena avuto una cosa simile (stringWithContentsOfFile, nessun JSON), e il problema era che il file aveva terminazioni di riga CRLF (windows) e Western-qualunque-è- chiamato codifica. Ho usato SubEthaEdit per convertire in LF e UTF-8 e tutto funziona correttamente.

+0

Onestamente, l'ho appena aperto, ho giocato un po 'con esso, ho cambiato la codifica e l'ho salvata di nuovo - era un carattere non valido da qualche parte nel file o qualcosa come hai trovato - una fine linea/problema di codifica. E 'stato il messaggio di errore molto fuorviante che mi ha gettato! – deanWombourne

4

Ho avuto lo stesso errore con te, usa il nome del file con [[NSBundle mainBundle] pathForResource: @ "pageList" ofType: @ "txt"]] buona fortuna!

0

Mi sono imbattuto nello stesso errore.

Quando ho giocato un po ', sembrava che non includessi il file nelle risorse del bundle di copia del target.

L'ho fatto e ha funzionato bene.

Ma, devo dire, l'errore è abbastanza fuorviante per una causa così semplice. Solo una supposizione sbagliata da Xcode

Problemi correlati