2016-05-24 3 views
-1

У меня есть NSDictionary, называемый productionSchedule, внутри есть 1 пара ключ/значение, а ключ этого называется KeyValue, значение KayValue - 31 элемент, внутри каждого из этих элементов в 2 ключа/значении пары NSDictionary и есть ключ и значение. То, что я пытаюсь сделать, это получить значение (которое является NSDictionary) ключа, например FA50100. Вот скриншот productionScheduleObjective-C Получить значение из ключа NSDictionary и NSArray

enter image description here

Вот вещи я попытался

NSDictionary *productionDictionary = [[productionSchedule valueForKey:@"KeyValue"] valueForKey:[prodSchedSortedKeys objectAtIndex:0]]; 

Как мне получить значение основаны от определенного ключа

Это дает мне все значения:

NSLog(@"%@", [[productionSchedule objectForKey:@"KeyValue"] valueForKey:@"Value"]); 

Я думаю, что я просто скучаю г что-то между ними KeyValue и Value

Когда я пытаюсь это:

NSLog(@"%@", [[[productionSchedule objectForKey:@"KeyValue"] valueForKey:@"FA50100"] valueForKey:@"Value"]); 

Я получаю 31 аннулирует :(

+0

Что вы подразумеваете под определенным ключом? –

+0

Я имею в виду, как бы я получил значение @ "Value", основанное на @ "Key" – user979331

+1

, вы можете сделать свой dict [@ "yourKey"] –

ответ

0

А. Чтение дамп

Свалка немного сбивает с толку из-за LLDB. Давайте посмотрим на это.

Это то, что вы получите:

productionSchedule (dictionary with 1 kvp) 
    [0] @"KeyValue" : 31 elements 
    key = @"KeyValue" 
    value = array of 31 elements 
    … 

Что? Словарь с индексом 0 ?! Это потому, что словари представлены внутри как список парных ключей и значений. Поэтому это просто первая пара списка. Давайте писать более семантически и забыть ключ = значение и = под ним:

productionSchedule (dictionary with 1 kvp) 
    @"KeyValue" : array with 31 Elements 
    … 

Так с

productionSchedule[@"KeyValue"] // evals to an array 

вы получите массив с 31 элементами. Вы должны получить доступ к этому массиву с помощью индекса. Предположим, вы хотите получить первый элемент этого массива. (Поскольку вы не узнали массив на этом слое, вы не сказали, какой элемент вы хотите. Возможно, вы хотите выполнить поиск по массиву. Сообщите мне).

productionSchedule (dictionary with 1 kvp) 
    @"KeyValue" : 31 elements 
    [0] dictionary with 2 kvp 
    … 

Первый элемент этого массива - словарь.

productionSchedule[@"KeyValue"][0] // evals to a dictionary 

У этого есть два kvp. Опять же, забудьте об индексировании. Это словарь:

productionSchedule (dictionary with 1 kvp) 
    @"KeyValue" : 31 elements 
    [0] dictionary with 2 kvp 
     @"Key" : @"FA50100" 
    … 

Так, чтобы получить @"FA50100", вы должны сделать

productionSchedule[@"KeyValue"][0][@"Key"] // evals to a dictionary 

B. Структура

Позвольте мне сказать: Вся структура, кажется, поврежден. Как вы его создали?Не имея полной информации, я бы дал вам несколько советов:

a) Совершенно бессмысленно иметь словарь с один kvp и бессмысленный ключ @ «KeyValue». Сначала мы должны выбросить его и начать с массива.

b) Внутри этого массива имеется 31 элемент. Я предполагаю, что это настоящий список. Но это моделируется со словарем с 2 kvp. (Я предполагаю, что эта структура относится к остальной части 31 элементов, тоже.) Словарь как этот

@ "Key": @ "FA50100" @ "Value": словарь с 6 KVP

c) Таким образом, вы создали kvp внутри коллекции, которая содержит kvp. В чем смысл этого?!!

Очевидно, что @"FA50100" - это что-то вроде идентификатора, а значение, указанное как @"Value", является данными для этого ключа. Так просто выбросить массив и Stor ID и его данные в одном словаре:

@"FA50100" : dictionary with 6 kvp. 

Затем вы можете получить доступ к значениям для @"FA50100" просто

NSDictionary *collection = … 
collection[@"FA50100"] // gets the dictionary for FA50100 

д) Если с не представляется возможным, т.к. id @"FA50100" может произойти более одного раза в списке, вернуться с помощью массива и поместить его в словарь с 6 kvp.

Но никогда, никогда не используйте такие клавиши, как «Ключ» или «Значение» в словаре.

C. Для отладки

Однако, вот подсказка, если вы заблудились в рекурсивных коллекции: Прочтите от шага к шагу и сделать журнал на каждый шаг, чтобы получить класс.

+0

Хорошо, поэтому я могу получить ключ через ... 'productionSchedule [@" KeyValue "] [0] [@" Key "]', но я не понимаю, как получить данные через 'NSDictionary * collection = ... collection [@ "FA50100"] 'Я не могу изменить свои данные, исходя из внешнего источника. – user979331

+0

Если вы не можете изменить структуру данных, вы получаете два варианта: 1. преобразуйте данные в более удобную структуру, когда вы ее получите, или 2. используйте '[@" KeyValue "] [0] [@" Key «]'. Лично я предпочел бы первый вариант. –

+0

Как [@ "KeyValue"] [0] [@ "Key"] 'Получите мне значение '???? – user979331

Смежные вопросы