luk*_*lte 0 objective-c nsdictionary key-value key-value-coding ios
为什么NSString @"@"不符合关键值?还有其他不符合要求的字符串吗?
您可以尝试使用此代码失败,例如:
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"Some Object" forKey:@"@"];
NSString *theObject = [dict valueForKey:@"@"];
Run Code Online (Sandbox Code Playgroud)
将其设置为密钥是可以的,但不能查询该密钥.当然,您可以通过附加一些其他字符串来解决此错误,以后再删除另一个时间,例如在您想拥有密钥@时执行以下操作:
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"Some Object" forKey:@"keyConst@"];
NSString *theObject = [dict valueForKey:@"keyConst@"];
Run Code Online (Sandbox Code Playgroud)
setObject:forKey:是
objectForKey:(而不是valueForKey:)从字典中检索项目的对应物:
NSString *theObject = [dict objectForKey:@"@"];
Run Code Online (Sandbox Code Playgroud)
或者,使用"新"字典下标语法:
dict[@"@"] = @"Some Object";
NSString *theObject = dict[@"@"];
Run Code Online (Sandbox Code Playgroud)
valueForKey:如果密钥开头,则使用键值编码方法@.来自以下文件-[NSDictionary valueForKey:]:
如果key不以"@"开头,则调用
objectForKey:.如果key以"@"开头,则删除"@"并[super valueForKey:]使用其余键调用.
例如,
NSString *x = [dict valueForKey:@"@description"];
Run Code Online (Sandbox Code Playgroud)
做同样的事
NSString *x = [dict description];
Run Code Online (Sandbox Code Playgroud)
所以在几乎所有情况下,objectForKey:除非你明确想要做一些Key-Value编码魔术,否则你应该使用它.
| 归档时间: |
|
| 查看次数: |
512 次 |
| 最近记录: |