1

nsdictionaryのキーに配列を追加したい。たとえば、各キーは質問であり、各質問には複数の回答があります。

質問1=[Answer1]、[Answer2]、[Answer3];

質問2=[Answer1]、[Answer2]、[Answer3];

以下のコードでは、NSDictionaryのNo Visible@interfaceがセレクター'setObject:forKey:'を宣言しています。

//answers
_surveyAnswers1 = [[NSMutableDictionary alloc] init];
NSArray *myArrayAnswers1 = [NSArray arrayWithObjects:@"One",@"Two", nil];
NSArray *myArrayAnswers2 = [NSArray arrayWithObjects:@"Three",@"Four", nil];
[_surveyAnswers1 setObject:myArrayAnswers1 forKey:@"FirstKey"];
[_surveyAnswers1 setObject:myArrayAnswers2 forKey:@"SecondKey"];

NSDictionaryのキーに配列を追加する正しい方法は何ですか?

4

2 に答える 2

4

_surveyAnswers1として宣言されているようNSDictionaryです:

NSDictionary * _surveyAnswers1;

次のように宣言する必要がありますNSMutableDictionary

NSMutableDictionary * _surveyAnswers1;

コンパイラは、宣言された型に基づいて、オブジェクトで使用できるメソッドをチェックします。NSDictionaryにはメソッドがないsetObject:forKey:ため、コンパイラはそれについて警告します (ARC では、これはエラーです)。オブジェクトは実際にはであるため、実行時に機能しますが、NSMutableDictionaryそれでも宣言を修正する必要があります。

于 2013-01-10T20:34:12.800 に答える
2

_surveyAnswers1をNSMutableDictionaryとしてインスタンス化していますが、これはNSDictionaryタイプとして宣言されているため、setObject:forKeyを呼び出すときに_surveyAnswers1をNSMutableDictionaryタイプに変更するか、_surveyAnswers1をNSMutableDictionaryにキャストします。

[((NSMutableDictionary *)_surveyAnswers1) setObject:myArrayAnswers1 forKey:@"FirstKey"];
[((NSMutableDictionary *)_surveyAnswers1) setObject:myArrayAnswers2 forKey:@"SecondKey"];
于 2013-01-10T20:39:45.523 に答える