【问题标题】:NSString containing just @ ist not Key Value CompliantNSString 仅包含 @ist 不符合键值
【发布时间】:2013-12-08 20:55:15
【问题描述】:

为什么 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@"];

【问题讨论】:

  • 道德:总是,总是 RTFM。 (阅读格式化 I/O 手册。)

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


【解决方案1】:

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 编码魔法。

【讨论】:

  • 不知何故,我多年来一直在 Cocoa 中编码,但从未知道这一点! +1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-25
  • 2014-11-15
  • 1970-01-01
  • 2020-02-20
  • 1970-01-01
  • 2018-12-10
  • 1970-01-01
相关资源
最近更新 更多