创建 CGRect 作为关联 Object?
Creating a CGRect as an Associated Object?
我正在尝试为我的 UIButton
创建一个 CGRect
属性 作为关联的 object,这样我就不必子类化 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?
P.S。这就是我在我的类别 header 文件中声明我的 属性 的方式:
@property (nonatomic, assign) CGRect tapArea;
此外,如何将我的 属性 默认设置为等于按钮的框架而不是 {{0, 0}, {0, 0}}
?
您非常努力地避免对 UIButton 进行子类化,这非常简单快捷。不要让它变得比必要的更复杂。
此外,NSValue 是一个 NSObject,应该保留而不是赋值。您的存储语义不正确,这可能就是您遇到问题的原因。你的关联对象是对象,需要像对象一样保留。
使用OBJC_ASSOCIATION_RETAIN_NONATOMIC
我正在尝试为我的 UIButton
创建一个 CGRect
属性 作为关联的 object,这样我就不必子类化 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?
P.S。这就是我在我的类别 header 文件中声明我的 属性 的方式:
@property (nonatomic, assign) CGRect tapArea;
此外,如何将我的 属性 默认设置为等于按钮的框架而不是 {{0, 0}, {0, 0}}
?
您非常努力地避免对 UIButton 进行子类化,这非常简单快捷。不要让它变得比必要的更复杂。
此外,NSValue 是一个 NSObject,应该保留而不是赋值。您的存储语义不正确,这可能就是您遇到问题的原因。你的关联对象是对象,需要像对象一样保留。
使用OBJC_ASSOCIATION_RETAIN_NONATOMIC