Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从NSDictionary获取值时出错_Ios_Objective C - Fatal编程技术网

Ios 从NSDictionary获取值时出错

Ios 从NSDictionary获取值时出错,ios,objective-c,Ios,Objective C,我试图从NSDictionary中获取值,但得到一个异常,即没有定义键 NSDictionary *userNames=[[NSDictionary alloc] init]; NSString * testValue = @""; testValue = [userNames valueForKey:@"@&"];//crashing here when key is @& 由于未捕获异常“NSUnknownKeyException”而终止应用程序, 原因:'[valueF

我试图从NSDictionary中获取值,但得到一个异常,即没有定义键

NSDictionary *userNames=[[NSDictionary alloc] init]; 
NSString * testValue = @"";
testValue = [userNames valueForKey:@"@&"];//crashing here when key is @&
由于未捕获异常“NSUnknownKeyException”而终止应用程序, 原因:'[valueForUndefinedKey:]

除非您知道什么是KVC并且确实需要KVC,否则不要使用valueForKey从字典中获取单个值

字典为空,键不存在,并且前导的@在KVC中具有特殊含义,因此在本例中valueForKey崩溃

正确的API是objectForKey,但如果密钥不存在,只需使用现代密钥订阅就可以获得至少为零的API

testValue = userNames[@"@&"];

如果键不以“@”开头,则调用objectforKey:。如果键以“@”开头,则去掉“@”并用键的其余部分调用[super valueForKey:]

你可以

testValue=[userNames objectForKey:@&]


testValue=[userNames valueForKey:@&]

您可能没有声明键和值。NSDictionary要求您使用值和键初始化。是从文件中获取它们,还是在初始化时声明它们

NSDictionary * userNames = [[NSDictionary alloc] initWithObjectsAndKeys:
                            @"value1", @"key1",
                            @"value2", @"key2",
                            nil];

NSString * testValue = [userNames valueForKey:@"key2"];
NSLog(@"%@", testValue);
还要注意的是,值是在之前写入的,然后定义键。参考这个

如果要像在问题中一样首先声明字典,然后向字典中添加值和键,则必须使用NSMutableDictionary

NSMutableDictionary *userNames1 = [[NSMutableDictionary alloc] init];
[userNames1 setValue:@"firstValue" forKey:@"key1"];
[userNames1 setValue:@"secondValue" forKey:@"key2"];

NSLog(@"%@", [userNames1 valueForKey:@"key2"]);

您的问题不清楚您必须提供完整的NSD声明。一个建议是使用NSDictionary*usernames=@{……},其中,@在“{@Anbu.Karthik”之前缺失。我更新了这个问题,你能检查一下吗?请参阅以下帮助: