我正在开发一款应用。我尝试使用以下代码
为NSDictionary的特定键设置值NSMutableArray *testArray=[NSMutableArray arrayWithObjects:@“Jan Month",@“Feb Month",@“Mar Month",@“Apr Month",@“May Month",@“June Month",@“July Month",@“Aug Month",@“Sep Month",@“Oct Month", nil];
NSMutableArray *testResult=[NSMutableArray arrayWithObjects:@"Pass",@"Pass",@"Pass",@"Pass",@"Pass",@"Pass",@"Pass",@"Pass",@"Pass",@"Pass", nil];
NSDictionary *testDetails=[NSDictionary dictionaryWithObjects:testArray forKeys:testResult];
[testDetails setValue:@"Fail" forKey:@“Feb Month"];
我的应用程序在第四行崩溃,发出错误,
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<__NSDictionaryI 0x1741a2f40> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key Feb Month.'
我试过通过检查来解决这个问题,
po [self.testDetails valueForKey:"Feb Month"]
<extracting data from value failed>
请帮我解决这个问题。
答案 0 :(得分:2)
首先,您需要为对象设置testResult
,为密钥设置testArray
。现在,如果您想要更改它的值,则需要将其声明为NSMutableDictionary
。
NSMutableDictionary *testDetails = [NSMutableDictionary dictionaryWithObjects:testResult forKeys:testArray];
[testDetails setValue:@"Fail" forKey:@“Feb Month"];
答案 1 :(得分:1)
试试这个:
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys:testResult,testArray, nil];
[dict setObject:@"Fail" forKey:@"Feb Month"];
答案 2 :(得分:1)
您是否正确设置了对象和密钥?您是否正确使用了NSDictionary和NSMutableDictionary?
我先检查了下面的代码。
NSMutableArray *testArray=[NSMutableArray arrayWithObjects:@"Jan Month",@"Feb Month",@"Mar Month",@"Apr Month",@"May Month",@"June Month",@"July Month",@"Aug Month",@"Sep Month",@"Oct Month", nil];
NSMutableArray *testResult=[NSMutableArray arrayWithObjects:@"Pass",@"Pass",@"Pass",@"Pass",@"Pass",@"Pass",@"Pass",@"Pass",@"Pass",@"Pass", nil];
NSDictionary *testDetails=[NSDictionary dictionaryWithObjects:testArray forKeys:testResult];
[testDetails setValue:@"Fail" forKey:@"Feb Month"];
现在看结果。只有一个键值对
你在这里的错误是你错误地设置了密钥和对象,以及你需要将值设置为NSMutableDictionary。
如果你想编辑字典中的值,你必须使用NSMutableDictionary,因为它是可变的。使用NSDictionary你不能编辑,因为它是不可变的。你不能改变任何东西。
NSMutableArray *testArray=[NSMutableArray arrayWithObjects:@"Jan Month",@"Feb Month",@"Mar Month",@"Apr Month",@"May Month",@"June Month",@"July Month",@"Aug Month",@"Sep Month",@"Oct Month", nil];
NSMutableArray *testResult=[NSMutableArray arrayWithObjects:@"Pass",@"Pass",@"Pass",@"Pass",@"Pass",@"Pass",@"Pass",@"Pass",@"Pass",@"Pass", nil];
NSMutableDictionary *testDetails=[NSMutableDictionary dictionaryWithObjects:testResult forKeys:testArray];
[testDetails setValue:@"Fail" forKey:@"Feb Month"];
现在看到打印结果
Printing description of testDetails:
{
"Apr Month" = Pass;
"Aug Month" = Pass;
"Feb Month" = Fail;
"Jan Month" = Pass;
"July Month" = Pass;
"June Month" = Pass;
"Mar Month" = Pass;
"May Month" = Pass;
"Oct Month" = Pass;
"Sep Month" = Pass;
}
另见下面的截图
你应该先知道使用字典。
Apple NSDictionary API reference says
NSDictionary类声明了对象的编程接口,用于管理键和值的不可变关联。当您需要一种方便有效的方法来检索与任意键相关联的数据时,请使用此类或其子类NSMutableDictionary。 NSDictionary创建静态字典,NSMutableDictionary创建动态字典。 (为方便起见,术语词典指的是其中一个类的任何实例,而没有指定其确切的类成员资格。)
Apple NSMutableDictionary API reference says
NSMutableDictionary类声明了对象的编程接口,用于管理键和值的可变关联。 它为从NSDictionary继承的基本操作添加了修改操作。
答案 3 :(得分:0)
因为您的代码中的NSDictionary testDetails只有一个值。
testDetails:
{
Pass = "Jan Month";
}
您需要将数组添加到字典键和值中,如下所示:
NSMutableDictionary *testDetails = [NSMutableDictionary dictionaryWithObjects:testResult forKeys:testArray];
然后使用以下代码替换键值:
[testDetails setValue:@"Fail" forKey:@"Feb Month"];