XCode: чтение данных из plist в NSmutablearray - PullRequest
0 голосов
/ 25 февраля 2012

Вот моя проблема. У меня есть список с именем myPlist, и он выглядит так:

<?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>1</key>    
<array>    
<string>Dog</string>    
<string> empty </string>    
<true/>    
</array>    
<key>2</key>    
<array>    
<string>Car</string>    
<string> empty </string>    
<false/>    
</array>    
<key>3</key>    
<array>    
<string>Table</string>    
<string> empty </string>    
<true/>    
</array>
</dict>    

У него есть три значения для каждой клавиши. Две строки и одна логическая. Я попытался «обычными способами» заполнить nsmutablearray списком, чтобы я мог показать его в виде таблицы, но NSMutableArray всегда пуст. Я попробовал это сначала:

NSMutableArray *mutable = [[NSArray arrayWithContentsOfFile:
             [[NSBundle mainBundle] pathForResource:@"myPlist" ofType:@"plist"]] retain];

Тогда я тоже попробовал это, но он по-прежнему возвращает 0 объектов.

 NSString *path = [[NSBundle mainBundle] pathForResource:@"myPlist" ofType:@"plist"];

        NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path];

        NSArray *mutable = [NSArray arrayWithArray:[dict objectForKey:@"Root"]];

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

Пожалуйста, помогите.

EDIT Благодаря Робу я теперь могу читать данные, используя эту строку:

NSDictionary *dogObject = [dict objectForKey:@"1"];

Но как я могу передать данные в NSMutableArray, чтобы я мог редактировать данные позже? Или я могу просто сохранить отредактированные данные, используя словарь?

1 Ответ

1 голос
/ 25 февраля 2012

Вам не хватает конечного тега для тега plist верхнего уровня.Я предполагаю, что это ошибка копирования / вставки.

Если вы добавите пропущенный </plist> в конце, это будет действительный список свойств.Он содержит словарь верхнего уровня, поэтому вы должны загрузить его в NSDictionary, а не в NSArray (или NSMutableArray).

Словарь верхнего уровня не содержит ключа Root.Он содержит три клавиши: 1, 2 и 3.Таким образом, вы можете получить объект от него так:

NSDictionary *dogObject = [dict objectForKey:@"1"];
...