2010-10-09 5 views
7

Estoy aprendiendo a usar archivos plist para almacenar datos en mi aplicación de iPhone. He estado leyendo un montón de preguntas sobre plist y dictionaryWithContentsOfFile en este sitio, pero no puedo ver lo que estoy haciendo mal.dictionaryWithContentsOfFile devolviendo nil desde mi lista de propiedades

La siguiente línea devuelve nil ("El diccionario es nulo" en la consola).

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

El archivo myFile.plist está en la carpeta de recursos, y contiene un par de cadenas:

<?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> 

Me estoy perdiendo algo aquí?

Respuesta

36

De la documentación ...

+ (id)dictionaryWithContentsOfFile:(NSString *)path

Parámetros

ruta

una ruta completa o relativa. El archivo identificado por ruta debe contener una representación de cadena de una lista de propiedades cuyo objeto raíz es un diccionario.

Valor de retorno

Un nuevo diccionario que contiene el diccionario en el camino, o nil si hay un error de archivo o si el contenido del archivo son una representación no válida de un diccionario.

Por lo tanto, probablemente necesite construir una ruta completa a su archivo plist (o pasar una ruta relativa adecuada. Me sorprendería mucho si "myFile" es una ruta relativa adecuada). Si construye una ruta adecuada pero luego sigue obteniendo nil, entonces probablemente tenga un archivo plist no válido.

La forma más fácil de obtener una ruta de un archivo en la carpeta de recursos es la siguiente:

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

que va a construir un camino para que un archivo llamado "myFile.plist" dentro de la carpeta Recursos.

+3

+1 para el enfoque mainBundle. Me duele la vista cuando la gente trata de encontrar su paquete de ruta (sin '[NSBundle mainBunde]', por supuesto) y construir sus propias rutas de recursos ... – Emil

+0

Genial, muchas gracias por su respuesta. Saludos, Matt – MattyG

Cuestiones relacionadas