Навигация по нескольким вложенным словарям в файле plist - PullRequest
1 голос
/ 10 декабря 2010

У меня есть файл .plist, который выглядит так: alt text

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

Не все элементы в словаре будут иметь одинаковые годы или размеры, связанные с ними, поэтому я не уверен, будут ли массивы подходить для этого.

Ответы [ 3 ]

2 голосов
/ 10 декабря 2010

Не существует «лучшего способа», который кто-либо может вам сказать. Это зависит от того, что вы делаете и как вы хотите использовать plist.

Стандартный способ сделать то, о чем вы говорите, - это перебрать все ключи в выражении for...in, аналогично ответу Филипе. Если вы знаете «путь», который хотите пройти, вы также можете использовать NSDictionary [dict objectForKey:key], чтобы получить более прямой доступ, чем циклический просмотр всего.

Здесь нет магии, просто представьте себе такую ​​структуру, как неупорядоченное дерево. У вас есть список элементов или «ветвей», и каждый элемент сам может быть другой ветвью с «листом» или узлом значения неупорядоченного дерева в конце заданного пути обхода.

Надеюсь, это поможет некоторым.

1 голос
/ 10 декабря 2010

вы можете использовать свойство keyEnumerator, чтобы просмотреть все ключи в словаре, или вы можете просто использовать

for (NSString *key in myDict)
{
    ...
}
0 голосов
/ 02 ноября 2011
NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
// get documents path
NSString *documentsPath = [paths objectAtIndex:0];
// get the path to our Data/plist file
NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"DecisionName.plist"];
NSLog(@"Error in dictionary");
NSLog(@"HELLO");
NSMutableDictionary *plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];

NSArray *testChoice = [[NSArray alloc] initWithArray:[plistDict objectForKey:selectedDecision]];
self.choices = [testChoice objectAtIndex:0];
self.preferences = [testChoice objectAtIndex:1];

Этот код будет полезен для получения значений из 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">
<array>
    <array>
        <string>Toyota</string>
        <string>Honda</string>
    </array>
    <array>
        <string>Speed</string>
        <string>Reliability</string>
        <string>Price</string>
    </array>
</array>
</plist>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...