为什么[dict valueForKey:@“@”]导致SIGABRT?

时间:2012-08-04 22:04:41

标签: objective-c macos

  

可能重复:
  Using valueForKeyPath on NSDictionary if a key starts the @ symbol?

错误:

Terminating app due to uncaught exception 'NSUnknownKeyException', reason:
'[<__NSDictionaryI 0x100110e00> valueForUndefinedKey:]:
this class is not key value coding-compliant for the key .'

示例代码:

NSDictionary *dict = @{ @"foo": @"bar" };

NSLog(@"foo=%@, qaz=%@", [dict valueForKey:@"foo"], [dict valueForKey:@"qaz"]);
NSLog(@"@=%@", [dict valueForKey:@"@"]); // SIGABRT

使用[dict objectForKey:@"@"]

时也会发生这种情况

即使是&#34; @&#34;键定义它仍然导致SIGABRT

NSDictionary *dict = @{ @"@": @"at-sign" };
NSLog(@"@=%@", [dict valueForKey:@"@"]); // SIGABRT

为什么会发生这种情况?如何检索&#34; @&#34;字典中的密钥?

1 个答案:

答案 0 :(得分:5)

在尝试访问字典中的对象时,您应该使用objectForKey:valueForKey:valueForKeyPath:方法适用于KVC,并且对其命名有一些限制。使用[dict objectForKey:@"@"]可以使用(null)at-sign作为示例。