1

同じ名前の複数のキーを含むNSDictionaryがあります。構造は次のとおりです。

Dictionary {

    "Text" => "Blah",
    "Text" => "Blah 2",
    "Text" => "Blah 3"

}

したがって、同じ名前の3つのキーがありますText。私はの値をusingに入れTextましたNSMutableArray

NSDictionary *notes = [d objectForKey:@"notes"]; //dictionary above
NSMutableArray *notesA = [notes valueForKey:@"Text"];
NSLog(@"%i", notesA.count);

ただし、配列内のアイテムの数を取得しようとすると、次のエラーでクラッシュします。

-[__NSCFString count]: unrecognized selector sent to instance 0x856c110

なぜこれが起こっているのか考えていますか?の値を出力してNSMutableArray確認することはできますが、数えることはできません。


XMLファイルは次のとおりです。

<tickets>
 <text>Blah</text>
 <text>Blah 2</text>
 <text>Blah 3</text>
</tickets>

ノート辞書の出力:

(
        {
        text = "Blah";
    },
        {
        text = "Blah 1";
    },
        {
        text = "Blah 2";
    }
)
4

1 に答える 1

4

NSArrayではなくオブジェクトとしてNSStringを追加しています。

NSDictionary *notes = [NSDictionray dictionaryWithObjectsAndKeys:[NSMutableArray arrayWithObjetcs:@"Blah",@"Blah 2", @"Blah3"],@"Text",nil];

NSMutableArray *notesA = [notes objectForKey:@"Text"];
NSLog(@"%i", [notesA count]);

NSMutableArrayを使用しているため、これも有効です。

NSDictionary *notes = [NSDictionray dictionaryWithObjectsAndKeys:[NSMutableArray array],@"Text",nil];

NSMutableArray *notesA = [notes objectForKey:@"Text"];
[notesA addObject:@"Blah"];
[notesA addObject:@"Blah 2"];
[notesA addObject:@"Blah 3"];
NSLog(@"%i", [notesA count]);

ところで:

Dictionary {

    "Text" => "Blah",
    "Text" => "Blah 2",
    "Text" => "Blah 3"

}

キーは一意である必要があるため、これは有効なNSDictionary構造ではありません。

あなたが欲しいものは:

Dictionary {
    "Text" => ["Blah", "Blah 2","Blah 3"]    
}

同じキーに複数のオブジェクトを設定すると、古いオブジェクトが新しいオブジェクトに置き換えられます。


パーサーがチケットタグを解析するとき、単一のテキストを追加するために使用する配列を作成する必要があります。


(
        {
        text = "Blah";
    },
        {
        text = "Blah 1";
    },
        {
        text = "Blah 2";
    }
)

ノートオブジェクトは辞書ではありません。これは、3つの辞書を含む配列です。それぞれにキーテキストといくつかの何とか値があります。

于 2012-07-28T22:38:27.930 に答える