0

私は辞書を渡されています:

aDictionary

ログアウトすると、辞書の形式は次のようになります。

{
 value1 = "subValue1 {label=value1, info1=, info2=}";
 value2 = "subValue2 {label=value2, info1=, info2=}";
 value3 = "subValue3 {label=value2, info1=, info2=}";
 }

ディクショナリを反復処理してから、value3 -> subValue3 -> info2 の値があるかどうかを判断する必要があります。

最初の反復を実行して、行のサブディクショナリを作成できます。

"subValue3 {label=value2, info1=, info2=}"

しかし、キーの数を取得するなど、それを使用しようとすると、-[subValue3 allKeys]: 認識されないセレクターがインスタンスに送信されます。

NSArray *keys;
int i, count;
id key, value;

keys = [aDictionary allKeys];
count = [keys count];
for (i = 0; i < count; i++)
{
    key = [keys objectAtIndex:i];
    value = [aDictionary objectForKey:key];
    NSLog (@"Key: %@ for value: %@", key, value);

    NSDictionary *subDictionary = [aDictionary objectForKey:key];
    if ([key isEqualToString:@"info2"]) {
        DLog(@"subDictioanry = %@", subDictionary);
        // Everything is fine up to here
        NSArray *keys2;
        int i2, count2;
        id key2, value2;

        keys2 = [subDictionary allKeys];
        count = [keys2 count];
        //
        // Right here I get "-[subValue3 allKeys]: unrecognized selector sent to instance"
        //
        for (i2 = 0; i2 < count2; i2++) {
            key2 = [keys2 objectAtIndex:i2];
            value = [subDictionary objectForKey:key];
            DLog (@"Key: %@ for value: %@", key2, value2);

            NSDictionary *subDictionary2 = [subDictionary objectForKey:key2];
            DLog(@"subDictionary2 = %@", subDictionary2);
        }
    }

質問: 値の 2 番目のグループの形式がわかりません ("subValue3 {label=value2, info1=, info2=}")。セットですか、配列ですか、辞書ですか? キー info2 に値があるかどうかを確認できるように、そのグループを (キー(?)「subValue3」で失敗することなく)辞書に入れるにはどうすればよいですか?

免責事項:辞書を反復処理するためのより効率的な方法があることは知っています。できるだけ明確にしようとしています。欠けている基本的なものがあると確信していますが、反復または NSDictionary に関する Apple ドキュメントに答えが表示されず、その 2 番目のグループの形式について何も見つかりません。ありがとう!

4

1 に答える 1

0

現在"subValue1 {label=value1, info1=, info2=}";NSStringです。だからallKeysNSStringクラッシュします。

実際、これ"subValue1 {label=value1, info1=, info2=}";は有効な json のように見えます。これは有効な JSON ではないと思います。jsonlint.comでさえそう考えています。

これは有効なjsonです

{
    "subValue1": {
        "label": "value1",
        "info1": "",
        "info2": ""
    }
}

そのようにjsonを構築した後、NSJSONSerialization変換に使用します-

NSError *e = nil;
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingMutableContainers error: &e];

if (!jsonDict) 
{
  NSLog(@"Error parsing JSON: %@", e);
} else 
{
   for(NSDictionary *item in jsonDict) 
      NSLog(@"Item: %@", item);
}
于 2012-12-07T04:07:40.777 に答える