Не могу прочитать из plist - PullRequest
0 голосов
/ 01 сентября 2011

Я пытаюсь сделать что-то, что я уже знаю, но это не работает. Ищете идеи, чтобы это исправить. Я думаю, что это связано с тем, как Xcode 4.1 создает plist-файлы.

Я пытаюсь прочитать строки из файла plist и вывести их в NSArray. Это мой код:

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

myArray = [[NSArray alloc]initWithContentsOfFile: myFile];

Я создал файл plist в Xcode - массив на верхнем уровне и несколько строк. myArray всегда нулевой. Я попытался открыть plist в текстовом редакторе, поскольку я читал в другом месте в stackoverflow, что Xcode 4 создает plist со словарем на верхнем уровне. Я вручную отредактировал, чтобы сделать его массивом на верхнем уровне - безуспешно. Наконец, я вернулся к диктату на верхнем уровне и попытался прочитать его в NSDictionary - тоже безуспешно.

Я смотрел урок после урока и читал ряд похожих вопросов по StackOverflow, но я просто не могу прочитать что-либо из файла plist - он определенно есть в комплекте. Я воссоздал plist бесчисленное количество раз в Xcode. Благодарен за любые предложения.

Вот как выглядит этот список:

<?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>New item</key>
<array>
    <string>Ping</string>
    <string>Pang</string>
    <string>Pong</string>
</array>
</dict>
</plist>

Ответы [ 2 ]

0 голосов
/ 02 сентября 2011

Корневым объектом вашего .plist является dict, поэтому вам нужно загрузить его в память как NSDictionary.

myDictionary = [[NSDictionary alloc] initWithContentsOfFile: myFile];
0 голосов
/ 02 сентября 2011

Если вы просто хотите загрузить plist, вам нужно использовать сериализацию списка свойств, чтобы сначала загрузить plist как NSData

[[NSData alloc] initWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"File1"]]

, а затем сериализовать его в dict (или массив, в зависимости от того, какой ваш корневой элементis) using

NSDictionary *aDict = [NSPropertyListSerialization propertyListWithData: options: format: error:]

Когда вы просматриваете plist в Xcode, элемент верхнего уровня является типом для создания aDict.

Смотрите здесь для получения дополнительной информации: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/PropertyLists/SerializePlist/SerializePlist.html

Если вы хотите, чтобы весь plist загружался в виде строк, вам, вероятно, нужно что-то сделать с помощью метода NSString, например, [NSString stringFromData].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...