2010-10-09 2 views
7

Я изучаю, как использовать файлы plist для хранения данных в моем приложении для iPhone. Я читал кучу вопросов о plist и dictionaryWithContentsOfFile на этом сайте, но не вижу, что я делаю неправильно.dictionaryWithContentsOfFile возвращает nil из моего списка свойств файла

Следующая строка возвращает nil («Словарь пуст»).

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

myFile.plist файл находится в папке ресурсов, и содержит несколько строк:

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

я упускаю что-то здесь?

ответ

36

Из документации ...

+ (id)dictionaryWithContentsOfFile:(NSString *)path

Параметры

путь

полный или относительный путь к файлу. Файл, идентифицированный по пути, должен содержать строковое представление списка свойств, корневым объектом которого является словарь.

Возвращаемое значение

новый словарь, который содержит словарь по пути, или ноль, если есть ошибка файла или если содержимое файла являются недействительными представление словаря.

Таким образом, вам нужно, вероятно, построить полный путь к вашему файлу plist (или передать соответствующий относительный путь). Я был бы очень удивлен, если «myFile» - соответствующий относительный путь). Если вы построите правильный путь, но затем все еще получаете nil, вы наверняка получите недопустимый файл plist.

Самый простой способ получить путь к файлу в папке ресурсов, как это:

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

Это будет построить путь для файла с именем «myFile.plist» внутри папки ресурсов.

+3

+1 для подхода mainBundle. Мне больно, когда люди пытаются найти свой пучок (без '[NSBundle mainBunde]', конечно) и строить свои собственные пути ресурсов ... – Emil

+0

Отлично, спасибо за ваш ответ. Привет, Мэтт – MattyG

 Смежные вопросы

  • Нет связанных вопросов^_^