[英]setvalue:forkey: not working, app is crashing
我正在开发一个应用程序。 我尝试使用以下代码为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>
请帮我解决这个问题。
对于所有这些,您需要为对象设置testResult
,为键设置testArray
。 现在,如果要更改其值,则需要将其声明为NSMutableDictionary
。
NSMutableDictionary *testDetails = [NSMutableDictionary dictionaryWithObjects:testResult forKeys:testArray];
[testDetails setValue:@"Fail" forKey:@“Feb Month"];
尝试这个:
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys:testResult,testArray, nil];
[dict setObject:@"Fail" forKey:@"Feb Month"];
您是否正确设置了对象和键? 还您正确使用了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"];
现在查看结果。只有1个键值对
您在这里的错误是您错误地设置了键和对象,以及需要将值设置为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;
}
另请参阅以下屏幕截图
您应该知道首先使用字典。
NSDictionary类为管理键和值的不可变关联的对象声明了编程接口。 当您需要方便有效的方法来检索与任意键关联的数据时,请使用此类或其子类NSMutableDictionary。 NSDictionary创建静态字典,而NSMutableDictionary创建动态字典。 (为方便起见,术语字典是指这些类之一的任何实例,但未指定其确切的类成员。)
Apple NSMutableDictionary API参考说
NSMutableDictionary类为管理键和值的可变关联的对象声明了编程接口。 它将修改操作添加到它从NSDictionary继承的基本操作中。
因为从您的代码中,您的NSDictionary testDetails将只有一个值。
testDetails:
{
Pass = "Jan Month";
}
您需要将数组添加到字典键和值,如下所示:
NSMutableDictionary *testDetails = [NSMutableDictionary dictionaryWithObjects:testResult forKeys:testArray];
然后使用以下命令替换键值:
[testDetails setValue:@"Fail" forKey:@"Feb Month"];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.