我有以下代码行:

[self.someBtn setValue:@"some-value" forKey:@"some-key"];


从故事板绑定someBtn的位置。
问题是我收到此错误:

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIButton 0x137e7deb0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key some-key.'


如果我注释此行代码,它将起作用。我只想使用setValue:forKey函数通过UIButton传递一些“元”信息。

有人可以向我解释发生了什么吗?谢谢!

最佳答案

通过关联的对象“附加一些值到按钮”是最简单的。您可以为UIButton编写扩展名

@interface UIButton (AssociatedObject)

@property (nonatomic, strong) id associatedObject;

@end

@implementation UIButton (AssociatedObject)
@dynamic associatedObject;

- (void)setAssociatedObject:(id)object {
     objc_setAssociatedObject(self, @selector(associatedObject), object, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

- (id)associatedObject {
    return objc_getAssociatedObject(self, @selector(associatedObject));
}


您可以阅读very good article on NSHipster,其中涉及关联对象的使用。

请注意,您实际上想做的任何事情,都可以通过对按钮进行子类化或将值存储在其他位置来轻松完成。

09-07 14:04