Я использую 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.
Итак ... что я должен сделать, чтобы заставить это вести себя последовательно, независимо от того, сколько есть X?
На первый взгляд, я думаю, что я просто изменил бы результаты на 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.