0

ここで何が問題なのかを突き止めようと髪を引っ張ってきましたが、何らかの理由JSONKitで必要な辞書が得られないため、plist 内の特定のキーと値のペアを参照できます。

代わりに、 の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>
4

1 に答える 1

1

問題は JSONKit が NSDictionary を返さないことではありません。

問題は、NSDictionary を列挙すると、「値」ではなく「キー」を取得することです。

したがって、次のコードの場合:

for(returnDictionary の id elem)
{
    for(elem の id 要素)
    {
        NSLog(@"%@",要素);
    }
}

外側のループの elem の型は、辞書の各エントリの「キー」です。(あなたのplistから、これ文字列です)

に変更します

for(returnDictionary の id elem)
{
    id val = returnDictionary[ elem ];
    for(val 内の id 要素)
    {
        NSLog(@"%@",要素);
    }
}

それが役立つかどうかを確認してください

于 2013-05-13T15:05:52.107 に答える