Я использую json-framework для создания NSDictionary из ответа JSON. Это прекрасно работает.
Теперь внутри этой полезной нагрузки JSON находится один или несколько объектов - назовем их X. В XML это примерно так:
<OBJECTS>
<X>
...
</x>
<X>
...
</X>
<X>
...
</X>
</OBJECTS>
Когда я смотрю в вышеупомянутый объект NSDictionary для всех X, вот так:
NSDictionary *results = [[dict objectForKey:@"OBJECTS"] objectForKey:@"X"];
Или даже:
NSDictionary *results = [dict valueForKeyPath:@"OBJECTS.X"];
Согласно gdb, я получаю NSCFArray объектов NSDictionary. (Да, я тоже чувствую здесь что-то забавное, но об этом чуть позже.)
Когда есть только один объект с именем X, я получаю добротный NSDictionary.
Итак ... что мне делать, чтобы это работало постоянно, независимо от того, сколько там крестиков?
На первый взгляд, мне показалось, что я просто изменил результаты на NSArray *, но что произойдет, если я захочу быстро пересчитать результаты? Прямо сейчас делаю так:
for (NSDictionary *result in results)
В случае NSCFArray (несколько X) я возвращаю отдельный NSDictionary для каждого X. В случае одного X я возвращаю один NSDictionary, за исключением того, что теперь моя перспектива на один уровень слишком глубока. Другими словами, вместо этого (надуманный пример):
(gdb) po results
<NSCFArray 0xd4a940>(
{
foo = {
bar = "something";
};
}
{
foo = {
bar = "something else";
};
}
)
Я получаю это:
(gdb) po results
{
foo = {
bar = "something";
};
}
Подсказки приветствуются / приветствуются! Вы даже можете спросить, нужно ли вообще разбирать это на части, но пока предположим, что эта поездка действительно необходима. (Тем не менее, я счастлив, что меня убедили в обратном, если кто-то будет достаточно твердо убежден в этом.)
В конце концов, я хочу иметь NSArray объектов NSDictionary.