我正在使用 json-framework 从 JSON 响应中创建一个 NSDictionary。这么多效果很好。
现在,在这个 JSON 有效负载中有一个或多个对象 - 我们称它们为 X。在 XML 中有点像这样:
<OBJECTS>
<X>
...
</x>
<X>
...
</X>
<X>
...
</X>
</OBJECTS>
当我查看前面提到的所有 X 的 NSDictionary 对象时,如下所示:
NSDictionary *results = [[dict objectForKey:@"OBJECTS"] objectForKey:@"X"];
甚至:
NSDictionary *results = [dict valueForKeyPath:@"OBJECTS.X"];
根据 gdb,我得到一个 NSDictionary 对象的NSCFArray。(是的,我在这里也闻到了一些有趣的东西,但稍后会详细介绍。)
当只有一个名为 X 的对象时,我会返回一个诚实的 NSDictionary。
所以......我应该怎么做才能使其行为一致,无论有多少 X ?
乍一看,我认为我只是将 results 更改为NSArray *,但是当我想快速枚举结果时会发生什么?现在我这样做:
for (NSDictionary *result in results)
在 NSCFArray 情况下(多个 X),我为每个 X 返回一个单独的 NSDictionary。在单个 X 情况下,我返回一个 NSDictionary,但现在我的观点太深了一层。换句话说,而不是这个(人为的例子):
(gdb) po results
<NSCFArray 0xd4a940>(
{
foo = {
bar = "something";
};
}
{
foo = {
bar = "something else";
};
}
)
我明白了:
(gdb) po results
{
foo = {
bar = "something";
};
}
欢迎/赞赏线索!您甚至可能会问是否有必要将其分开,但现在让我们假设这次旅行确实是必要的。(不过,如果有人对此感到足够强烈,我很高兴被说服。)
最终,在一天结束的时候,我想要一个 NSArray 的 NSDictionary 对象。