2010-10-09 8 views
7

Sto imparando come utilizzare i file plist per l'archiviazione dei dati nella mia app per iPhone. Ho letto un sacco di domande su plist e dictionaryWithContentsOfFile su questo sito, ma non riesco a vedere cosa sto facendo male.dictionaryWithContentsOfFile che restituisce nil dal mio elenco di proprietà file

La seguente riga restituisce nil ("Il dizionario è null" alla console).

NSLog(@"The dictionary is %@",[NSDictionary dictionaryWithContentsOfFile:@"myFile"]); 

Il file myFile.plist è nella cartella delle risorse, e contiene alcune stringhe:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>name</key> 
    <string>john</string> 
    <key>aname</key> 
    <string>jen</string> 
</dict> 
</plist> 

mi manca qualcosa qui?

risposta

36

Dalla documentazione ...

+ (id)dictionaryWithContentsOfFile:(NSString *)path

Parametri

percorso

un percorso completo o un parente. Il file identificato dal percorso deve contenere una rappresentazione di stringa di un elenco di proprietà il cui oggetto radice è un dizionario.

Return Value

un nuovo dizionario che contiene il dizionario al percorso, o nullo se v'è un errore di file o se il contenuto del file sono una rappresentazione valida di un dizionario.

Quindi, è necessario costruire probabilmente un percorso completo al file plist (o passare in un percorso relativo appropriata. Sarei molto sorpreso se "myFile" è un percorso relativo appropriato). Se si crea un percorso corretto ma si sta ancora ottenendo nil indietro, allora probabilmente si ha un file plist non valido.

Il modo più semplice per ottenere un percorso di un file nella cartella di risorse è come questo:

NSString * plistPath = [[NSBundle mainBundle] pathForResource:@"myFile" ofType:@"plist"]; 

che costruirà un percorso per un file chiamato "myFile.plist" dentro cartella Risorse.

+3

+1 per l'approccio mainBundle. Mi fa male agli occhi quando le persone cercano di trovare il loro percorso (senza '[NSBundle mainBunde]', ovviamente) e costruiscono i propri percorsi delle risorse ... – Emil

+0

Grande, grazie mille per la risposta. Saluti, Matt – MattyG

Problemi correlati