2013-05-13 63 views
0

我一直在拉我的頭髮試圖找出這裏錯了什麼,出於某種原因JSONKit沒有給我我需要的字典,所以我可以引用特定的鍵/值對plist中。JSONKit返回不需要的NSCFString而不是NSDictionary

取而代之的是它顯示爲NSCFString,這顯然不符合ObjectForKey:等方法。我已經找到了解決方案;告訴我禁用ARC,重新啓動/重新安裝Xcode,以及各種不同的實現,但沒有預算。更糟的是,在另一個具有相同功能的項目中,我實際上具有相同的代碼塊,並且它可以無縫工作。

NSError * error = NULL; 
NSData * plistData = [NSData dataWithContentsOfFile:filepath]; 
id plist = [NSPropertyListSerialization propertyListWithData:plistData options:NSPropertyListImmutable format:NULL error:&error]; 
NSString * jsonString = [plist JSONStringWithOptions:JKSerializeOptionPretty error:&error]; 
NSDictionary * returnDictionary = [jsonString objectFromJSONString]; 
for(id elem in returnDictionary) 
{ 
    for(id elements in elem) 
    { 
     NSLog(@"%@",elements); 
    } 
} 

給出的錯誤:

-[NSCFString countByEnumeratingWithState:objects:count:]: unrecognized selector sent to instance 0x1815750 

有問題的plist中:

<dict> 
    <key>20003</key> 
    <dict> 
     <key>type</key> 
     <string>1</string> 
     <key>name</key> 
     <string>Home Name</string> 
     <key>font</key> 
     <string>Courier</string> 
     <key>size</key> 
     <string>22</string> 
     <key>color</key> 
     <string>FFFFFFFF</string> 
    </dict> 
    <key>20001</key> 
    <dict> 
     <key>type</key> 
     <string>1</string> 
     <key>name</key> 
     <string>heyhey</string> 
     <key>font</key> 
     <string>XXX</string> 
     <key>size</key> 
     <string>11</string> 
     <key>color</key> 
     <string>FFFF0000</string> 
    </dict> 
</dict> 
</plist> 
+0

你明白了什麼,當你'的NSLog()''plist',' jsonString','returnDictionary'和'elem'? – 2013-05-13 10:46:02

回答

1

問題不是JSONKit沒有返回的NSDictionary。

問題是,當你通過NSDictionary枚舉時,你得到的是「key」,而不是「value」。

因此,對於以下的代碼:

 
for(id elem in returnDictionary) 
{ 
    for(id elements in elem) 
    { 
     NSLog(@"%@",elements); 
    } 
} 

在外環的類型ELEM的是「鍵」爲字典中的每個條目。 (其中,從你的plist,字符串)

將其更改爲

 
for(id elem in returnDictionary) 
{ 
    id val = returnDictionary[ elem ]; 
    for(id elements in val) 
    { 
     NSLog(@"%@",elements); 
    } 
} 

看看是否有幫助

+0

或者:for(id elem in [returnDictionary allValues])for the outer loop – 2013-05-13 15:58:23

相關問題