我使用关联引用作为我类别属性的存储
头文件包含:
@interface UIImageView (Spinning)
@property (nonatomic, assign) BOOL animating;
@end
实施是
- (void)setAnimating:(BOOL)value {
objc_setAssociatedObject(self, animatingKey, value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
但是,我收到上面一行的警告
Implicit conversion of 'BOOL' (aka 'signed char') to 'id' is disallowed with ARC
如果你知道我在这里做错了什么,请帮助我们如何避免这个问题
答案 0 :(得分:19)
objc_setAssociatedObject
函数需要第3个参数的Objective-C对象。但是您尝试传入非对象BOOL
值。
这与尝试向BOOL
添加NSArray
没什么区别。你需要包装BOOL
。
尝试:
objc_setAssociatedObject(self, animatingKey, [NSNumber numberWithBool:value], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
当您稍后获得关联对象时,您需要从BOOL
中提取NSNumber
值。
更新:使用现代Objective-C,您可以:
objc_setAssociatedObject(self, animatingKey, @(value), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
答案 1 :(得分:0)
void objc_setAssociatedObject(id object, void *key, id value, objc_AssociationPolicy policy)
objc_setAssociatedObject接受id类型的值作为第三个参数,并且您尝试将BOOL传递给它。因此,根据需要进行转换。