我正在使用json-framework來創建一個NSDictionary出JSON響應。這很奇妙。現在NSDictionary objectForKey返回值
,這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"];
我得到的,根據廣發行,一個NSCFArray NSDictionary對象。 (是的,我聞了一下這個事情太搞笑了這裏,但更多。)
當只有一個命名對象X,我回來一個誠實,善良的NSDictionary。
那麼......無論有多少個X,我應該怎麼做才能使其表現一貫?
乍一看,我認爲我只是將結果更改爲NSArray *,但是當我想快速枚舉結果時會發生什麼?現在我這樣做:
for (NSDictionary *result in results)
在NSCFArray情況下(多XS),我回來了個人的NSDictionary每個X.在單X的情況下,我回到了一個的NSDictionary,除了現在我的觀點是一個層次太深。換句話說,而不是這個(人爲的例子):
(gdb) po results
<NSCFArray 0xd4a940>(
{
foo = {
bar = "something";
};
}
{
foo = {
bar = "something else";
};
}
)
我得到這個:
(gdb) po results
{
foo = {
bar = "something";
};
}
線索歡迎/讚賞!你甚至可能會問,是否有必要將此分開,但現在讓我們假設這次旅行是非常必要的。 (不過,如果有人對此感到足夠強烈,我很樂意被說服)。
最終,在一天結束時,我想擁有一個NSArray的NSDictionary對象。
啊,我沒有意識到objectForKey不能用來訪問同一個鍵的多個實例 - 謝謝! (雖然它似乎與NSCFArray完全相同......或者我正在幻覺......或者它只是未定義的行爲,我很幸運)。 我剛剛在本文中發生過,它處理多個X的,就像它一樣,接下來我會試試這個。如果它能正常工作,我會總結這個修復程序並回到這裏! http://iphonedevelopertips.com/cocoa/json-framework-for-iphone-part-2.html – 2009-06-22 13:24:33
同時,這裏是我正在使用的成員函數。請注意,它返回一個字典或數組。除了任何庫mods,如果我可以測試字典,我可以根據需要將它分配給單對象數組。 http://json-framework.googlecode.com/svn/trunk/documentation/interfaceNSString_07NSString__SBJSON_08.html – 2009-06-22 13:41:54
我錯了同一個鍵的多個實例。 (當然,我的意思是,如果這就是NSDictionary的工作原理,那麼它就是這樣工作的!)事實證明,我們確實有一系列字典,這正是你猜測的。 :) – 2009-06-23 11:59:19