【发布时间】:2015-02-08 09:31:59
【问题描述】:
我正在尝试为我的UIButton 创建一个CGRect 属性作为关联对象,这样我就不必为此子类UIButton。
基本上,我正在添加一个名为tapArea 的属性,但我在创建它时遇到了麻烦。这是我目前所拥有的:
@dynamic tapArea;
- (void)setTapArea:(CGRect)tapArea {
objc_setAssociatedObject(self, @selector(tapArea), [NSValue valueWithCGRect:tapArea], OBJC_ASSOCIATION_ASSIGN);
}
- (CGRect)tapArea {
return [objc_getAssociatedObject(self, @selector(tapArea)) CGRectValue];
}
当我NSLog 说dogButton.tapArea 时,记录器会打印出{{0,0},{0,0}},这是有道理的。当我尝试设置它时出现问题。我收到以下崩溃:
-[__NSCFString CGRectValue]: unrecognized selector sent to instance 0x14e65e80
我相信我在使用 NSValue 之前遇到了这个错误,但我没有正确地把它拉回来。如何修复我的 getter?
附:这就是我在类别头文件中声明我的属性的方式:
@property (nonatomic, assign) CGRect tapArea;
另外,我怎样才能将我的属性设置为默认等于按钮的框架而不是{{0, 0}, {0, 0}}?
【问题讨论】:
-
objc_getAssociatedObject(self, @selector(tapArea)) 可能正在返回 NSString,因为该错误表明您正在尝试在 NSString 上执行 CGRectValue。我建议您也发布您的 objc_getAssociatedObject 方法以获得更彻底的答案。
-
我想了这么多,除了我尝试使用
CGRectFromString(),但似乎无法让它工作,没有它抛出一个内联错误。 -
@LyndseyScott objc_getAssociatedObject 是一个运行时方法:)
-
好的,我会在文档中找到它。
标签: ios objective-c uibutton cgrect associated-object