在NSMutableDicitionary的setValue方法中,forKey和forKeyPath有什么区别?我在文档中查看了它们,它们对我来说似乎是一样的.我尝试了下面的代码,但我无法区分它们.
NSMutableDictionary *dict = [NSMutableDictionary dictionary]; [dict setValue:@"abc" forKey:@"ABC"]; [dict setValue:@"123" forKeyPath:@"xyz"]; for (NSString* key in dict) { id val = [dict objectForKey:key]; NSLog(@"%@,%@",key,val); }
解决方法
这两种方法都是
Key-Value Coding的一部分,通常不应用于字典中的元素访问.它们只能处理NSString类型的键,并且需要特定的语法.
它们之间的区别在于指定(单个)键只会查找该项.
另一方面,指定关键路径遵循通过对象的路径.如果您有字典词典,则可以使用“key1.key2”之类的键路径在第二级中查找元素.
如果您只想访问字典中的元素,则应使用objectForKey:和setObject:forKey:.
编辑以回答为什么valueForKey:不应该使用:
> valueForKey:仅适用于字符串键.字典可以使用其他对象作为键.> valueForKey:以不同方式处理以“@”字符开头的键.您无法访问其键以@开头的元素.>最重要的是:通过使用valueForKey:你说:“我正在使用KVC”.应该有这样做的理由.使用objectForKey时:您只是通过自然的API访问字典中的元素.