NSArray 的 -valueForKey 问题:当其项为 NSDictionary 时
我有一个包含 NSDictionary
项目的数组,我想将这些项目转换为其他对象,我的第一个想法是 valueForKey:
,所以我添加了一个类别方法 toMyObject
for NSDictionary
,并调用:
[array valueForKey:@"toMyObject"]
但它并没有按预期工作,它只是返回数组NSNull
。
如果我不想枚举数组,有什么想法可以解决这个问题吗?
I have an array which contains items of NSDictionary
, I want to transform the items to other objects, my first thought is valueForKey:
, so I add a category method toMyObject
for NSDictionary
, and call for:
[array valueForKey:@"toMyObject"]
But it doesn't work as expect, it just returns the array of NSNull
s.
Any ideas to solve this problem if I don't want to enumerate the array?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
回答我自己。字典的
valueForKey:
会覆盖默认行为,如果字典没有 key,则会返回 nil,不会像 Apple 那样像NSObject
那样调用访问器方法文件说:由于
NSDictionary
是一个集群类,因此不建议子类化来覆盖该行为。相反,我使用这样的 swiss 方法:现在 NSArray 可以安全地调用
valueForKey:@"toMyObject"
。Answer to myself. The
valueForKey:
of dictionary overwrite the default behavior, if the dictionary doesn't have the key, it will return nil and not call the accessor method asNSObject
do, as Apple document says:Since
NSDictionary
is a cluster class, it's not recommend to subclass to overwrite the behavior. Instead I use the method swiss like this:Now it's safe for an NSArray to call
valueForKey:@"toMyObject"
.另一种无需调整的实现:
One more implementation without swizzling: