#objective-c #nsarray #nsdictionary
#objective-c #nsarray #nsdictionary
Вопрос:
Я ценю, что здесь много вопросов такого типа, но я не смог найти приемлемый ответ.
Проще говоря, мне нужно получить массив цен на все товары в выбранной категории.
Вот мой список:
<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:
currentDetail просто показывает продукт 1, продукт 2 и т.д.
Поскольку быстрое перечисление a 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
расположены без определенного порядка.
Комментарии:
1. Вы не просто показали мне решение, вы многому научили меня о том, как получить доступ к глубоким словарям. Твое здоровье, приятель, твоя палочка-выручалочка!