为什么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@"];
答案 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编码魔术。