'BOOL'(又名'signed char')到'id'的隐式转换,objc_setAssociatedObject
我正在使用关联的引用作为我的类别的属性的存储
头文件包含:
@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
如果你知道我在这里做错了什么,请帮助如何避免这个问题
objc_setAssociatedObject
函数需要第三个参数的Objective-C对象。 但是你正试图传递一个非对象的BOOL
值。
这与尝试将一个BOOL
添加到一个NSArray
没有什么不同。 你需要包装BOOL
。
尝试:
objc_setAssociatedObject(self, animatingKey, [NSNumber numberWithBool:value], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
当然,当你稍后获得关联的对象时,你将需要从NSNumber
提取BOOL
值。
更新:使用现代的Objective-C,你可以做到:
objc_setAssociatedObject(self, animatingKey, @(value), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
void objc_setAssociatedObject(id object, void *key, id value, objc_AssociationPolicy policy)
objc_setAssociatedObject接受值的idtypes作为第三个参数,并且您正试图将BOOL传递给它。 所以根据需要进行转换。