Вложенный словарь - ориентация на отдельные ключи - PullRequest
0 голосов
/ 13 июня 2011

Я ценю, что есть много вопросов такого типа, но я не смог найти приемлемый ответ.

Проще говоря, мне нужно получить массив цен для всех продуктов в пределахвыбранная категория.

Вот мой pList:

<key>Product Category</key>
    <dict>
        <key>Product 1</key>
        <dict>
            <key>Image</key>
            <string></string>
            <key>Large Image</key>
            <string></string>
            <key>Detail</key>
            <string></string>
            <key>Price</key>
            <integer>100</integer>
        </dict>
        <key>Product 2</key>
        <dict>
            <key>Image</key>
            <string></string>
            <key>Large Image</key>
            <string></string>
            <key>Detail</key>
            <string></string>
            <key>Price</key>
            <integer>200</integer>
        </dict>
    </dict>

Я не знаю, как нацелиться вглубь иерархии, подобной этой.Вот моя попытка:

NSString *detailPListPath = [[NSBundle mainBundle] pathForResource:@"detail" ofType:@"plist"];
NSDictionary *detailDictionary = [NSDictionary dictionaryWithContentsOfFile:detailPListPath];
currentDetail = [[NSMutableArray alloc] init];

for (id object in [detailDictionary objectForKey:indication]) {
    [currentDetail addObject:object];
}

Но тогда currentDetail просто показывает Продукт 1, Продукт 2 и т. Д.

Спасибо за любую помощь, которую вы можете предложить!

1 Ответ

4 голосов
/ 13 июня 2011

currentDetail просто показывает Product 1, Product 2 и т. Д.

Поскольку быстрое перечисление NSDictionary перебирает ключи, вы добавляете ключи в массив.Следовательно, ваш вывод показывает продукт 1, продукт 2 и т. Д.

Мне нужно получить массив цен для всех продуктов в выбранной категории.

Вам необходимоиспользуйте эти ключи (продукт 1, продукт 2 и т. д.), чтобы получить словарь связанных продуктов, а затем получить значение, связанное с ключом цены:

NSDictionary *detailDict = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"detail" ofType:@"plist"]];
NSDictionary *categoryDict = [detailDict objectForKey:@"Product Category"];
NSMutableArray *pricesArray = [NSMutableArray arrayWithCapacity:[categoryDict count]];
for (NSString *key in categoryDict) {
    [pricesArray addObject:[[categoryDict objectForKey:key] objectForKey:@"Price"]];
}

Имейте в виду, что полученный pricesArray находится без определенного заказа .

...