Objective c JSONKit返回不需要的NSCFString而不是NSDictionary

Objective c JSONKit返回不需要的NSCFString而不是NSDictionary,objective-c,jsonkit,nscfstring,Objective C,Jsonkit,Nscfstring,我一直在绞尽脑汁想弄清楚这里出了什么问题,出于某种原因,JSONKit没有给我所需的字典,以便我可以引用plist中的特定键/值对 相反,它显示为NSCFString,这显然不符合ObjectForKey:等方法。我到处寻找解决办法;告诉我禁用ARC,重新启动/重新安装xcode,以及各种不同的实现,但不允许使用Budding。更糟糕的是,我在另一个具有相同功能的项目中有效地使用了相同的代码块,并且它可以无缝地工作 NSError * error = NULL; NSData * plistDa

我一直在绞尽脑汁想弄清楚这里出了什么问题,出于某种原因,
JSONKit
没有给我所需的字典,以便我可以引用plist中的特定键/值对

相反,它显示为
NSCFString
,这显然不符合
ObjectForKey:
等方法。我到处寻找解决办法;告诉我禁用ARC,重新启动/重新安装xcode,以及各种不同的实现,但不允许使用Budding。更糟糕的是,我在另一个具有相同功能的项目中有效地使用了相同的代码块,并且它可以无缝地工作

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
问题中的普利斯特:

<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>

20003
类型
1.
名称
本名
字体
信使
大小
22
颜色
FFFFFFFF
20001
类型
1.
名称
嘿
字体
XXX
大小
11
颜色
FFFF0000

问题不是JSONKit没有返回NSDictionary

问题是,当您通过NSDictionary进行枚举时,您得到的是“键”,而不是“值”

因此,对于以下代码:

for(id elem in returnDictionary) { for(id elements in elem) { NSLog(@"%@",elements); } } for(返回字典中的id元素) { for(元素中的id元素) { NSLog(@“%@”,元素); } } 外部循环中的元素类型是字典中每个条目的“键”。(从你的plist来看,它是一根弦)

换成

for(id elem in returnDictionary) { id val = returnDictionary[ elem ]; for(id elements in val) { NSLog(@"%@",elements); } } for(返回字典中的id元素) { id val=returnDictionary[elem]; 用于(val中的id元素) { NSLog(@“%@”,元素); } }
看看这是否有帮助

当您
NSLog()
plist
jsonString
returnDictionary
elem
时,您会得到什么?或者:for(id elem in[returnDictionary allValues])for(id elem in[returnDictionary allValues])for外部循环