Не могу прочитать данные из plist - PullRequest
1 голос
/ 24 августа 2011

У меня проблемы с чтением данных из моего plist-файла.Как правильно извлечь значения в строке?И скажем, у меня есть 2 предмета, как получить оба?Ниже будет изображение на листе.EventAddress.plist

А ниже приведен исходный код для списка.Я где-то читал, что может быть разница с Xcode 3 и Xcode 4.

<?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>Array</key>
    <array>
        <string>value 1</string>
        <string>value 2</string>
    </array>
</dict>
</plist>

Ответы [ 2 ]

3 голосов
/ 24 августа 2011

Сначала вам нужно получить путь к файлу ресурса plist в вашем комплекте приложений:

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

По этому пути вы можете загрузить файл plist в память. Это довольно просто, так как ваш корневой узел файла plist является массивом:

NSArray* plist = [NSArray arrayWithContentsOfFile:plistPath];

Чаще всего корневым узлом в вашем списке является словарь, словарь имеет эквивалентный удобный метод для загрузки списков. Если корневой узел неизвестен, вам следует подать в суд на класс NSPropertyListSerialization, немного больше работы, но гораздо более гибкий.

Содержимое в памяти plist всегда будет экземплярами значения свойства классов, используйте их так же, как и для любых экземпляров:

  • NSData
  • NSString
  • NSArray
  • NSDictionary
  • NSDate
  • NSNumber
1 голос
/ 25 августа 2011

до сих пор отвечаю об этом.Но мне удалось найти код, который заставил его работать на меня уже.Коды ниже.Спасибо Пейлоу за ваши усилия.

    NSString *path = [[NSBundle mainBundle] pathForResource:@"EventAddress" ofType:@"plist"]; 
    NSMutableDictionary *myDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:path];

    NSArray* allmyKeys = [myDictionary  allValues];
    NSLog(@"%@", allmyKeys);
    NSLog(@"%@", [[allmyKeys objectAtIndex:0] objectAtIndex:0]);

Последние 2 NSLog используются, чтобы увидеть, возвращает ли мой plist массив значений, и узнать значение только 1 из них.И большое спасибо за отладчик, посмотрев его почти 3 дня подряд, я также осознал свою проблему.Чертов массив - это не одно измерение, его ДВА ИЗМЕРЕНИЯ.Вот почему я использовал objectAtIndex дважды.

...