Комплекс NSDictionary. Взял объекты-ключи и отсортировал их как NSArray или отдельные переменные? - PullRequest
2 голосов
/ 06 января 2012

У меня есть NSDictionary, который был преобразован из XML, который действительно смущает меня. Если бы вы могли взглянуть и сообщить мне лучший способ получения объектов для ключа class_id, я был бы очень признателен.

 {
     response=  {
        "@status" = ok;
        rosters =         {
                     "@page" = 1;
                     "@page_count" = 1;
                     "@records_per_page" = 50;
                     "@total_record_count" = 8;
                     roster =               (
                                            {
                                       "@class_id" = 0001;
                                       "@role" = 0;
                                       "@user_id" = 12345;
                                       class=                  {
                                                                "@active" = false;
                                                                "@name" = NAME;
                                                               }
                                            }
                                            {
                                       "@class_id" = 0002;
                                       "@role" = 0;
                                       "@user_id" = 12345;
                                            }
                                            {
                                       "@class_id" = 0003;
                                       "@role" = 0;
                                       "@user_id" = 12345;
                                            }
                                            );
                             }
                 }
}

Все, что я хочу сделать, это либо установить переменные для отдельных идентификаторов class_id, либо поместить все идентификаторы class_id в NSArray. Я читал документацию по Apple и перепробовал все методы, которые только мог придумать, но он либо вылетает с nsexception, либо не возвращает данных. Большое спасибо за вашу помощь.

Хорошо, давайте сделаем резервную копию на минуту. Похоже, что плагин XMLReader, который я использовал для преобразования этого в NSDictionary, делает это намного сложнее, чем нужно. Вот исходные данные XML.

<response status="ok">
<rosters page_count="1" page="1" records_per_page="50" total_record_count="7">
<roster class_id="0001" role="S" user_id="91563" roster_id="ID"/>
<roster class_id="0002" role="S" user_id="91563" roster_id="ID"/>
<roster class_id="0003" role="S" user_id="91563" roster_id="ID"/>
<roster class_id="0004" role="S" user_id="91563" roster_id="ID"/>
<roster class_id="0005" role="S" user_id="91563" roster_id="ID"/>
<roster class_id="0006" role="S" user_id="91563" roster_id="ID"/>
<roster class_id="0007" role="S" user_id="91563" roster_id="ID"/>
</rosters>
</response>

Может кто-нибудь предложить простой способ просто получить значения class_id? Является ли преобразование в NSDictionary разумным способом сделать это? Мне просто нужны данные в виде отдельных переменных или NSArray.

1 Ответ

2 голосов
/ 06 января 2012

Не беспокойтесь о «лучшем методе». Просто используйте метод, который не будет сбивать с толку, чтобы вернуться позже и позволит вам перейти к более важным вещам.

NSMutableArray *classIds = [NSMutableArray array];
NSDictionary *rosterArray = [convertedXmlDictionary valueForKeyPath:@"response.rosters.roster"];
for (NSDictionary *roster in rosterArray) {
    [classIds addObject:[roster objectForKey:@"@class_id"]];
}
...