仅包含@ ist的NSString不符合Key Value

时间:2013-12-08 12:30:30

标签: ios objective-c nsdictionary key-value key-value-coding

为什么NSString @"@"不符合键值? 还有其他字符串也不合规吗?

您可以尝试使用此代码失败,例如:

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"Some Object" forKey:@"@"];

NSString *theObject = [dict valueForKey:@"@"];

将其设置为密钥即可,但不能查询该密钥。 当然你可以通过附加一些其他字符串来解决这个错误,你稍后会删除另一个时间,比如当你想拥有密钥@时执行以下操作:

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"Some Object" forKey:@"keyConst@"];

NSString *theObject = [dict valueForKey:@"keyConst@"];

1 个答案:

答案 0 :(得分:6)

setObject:forKey:的对应方是 objectForKey:(而非valueForKey:)从字典中检索项目:

NSString *theObject = [dict objectForKey:@"@"];

或者,使用“新”字典下标语法:

dict[@"@"] = @"Some Object";
NSString *theObject = dict[@"@"];

如果密钥以valueForKey:开头,则

@使用键值编码方法。 来自-[NSDictionary valueForKey:]的文档:

  

如果密钥不以“@”开头,则调用objectForKey:。如果关键   以“@”开头,剥离“@”并调用[super valueForKey:]   关键的其余部分。

例如,

NSString *x = [dict valueForKey:@"@description"];

相同
NSString *x = [dict description];

因此,几乎在所有情况下,除非明确说明,否则应使用objectForKey: 想要做一些Key-Value编码魔术。