1

我想将数组添加到 nsdictionary 中的键。例如每个键是一个问题,每个问题都有多个答案。

问题1 = [答案1],[答案2],[答案3];

问题2 = [答案1],[答案2],[答案3];

使用下面的代码,我得到No Visible @interface for NSDictionary 声明选择器'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没有 method 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 回答