Ios '的隐式转换;布尔';(又名';签名字符';)至';id',objc_setAssociatedObject
我正在使用关联引用作为类别属性的存储 头文件包含:Ios '的隐式转换;布尔';(又名';签名字符';)至';id',objc_setAssociatedObject,ios,objective-c,objective-c-category,Ios,Objective C,Objective C Category,我正在使用关联引用作为类别属性的存储 头文件包含: @interface UIImageView (Spinning) @property (nonatomic, assign) BOOL animating; @end 实施是 - (void)setAnimating:(BOOL)value { objc_setAssociatedObject(self, animatingKey, value, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } 然而
@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\u setAssociatedObject
函数要求第三个参数使用Objective-C对象。但您正试图传入一个非对象BOOL
值
这与尝试将BOOL
添加到NSArray
没有什么不同。您需要包装BOOL
尝试:
当然,当您稍后获得关联对象时,需要从NSNumber
中提取BOOL
值
更新:使用现代Objective-C,您可以:
objc_setAssociatedObject(self, animatingKey, @(value), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
objc_setAssociatedObject接受值的id类型作为第三个参数,您正试图将BOOL传递给它。因此,根据需要进行转换
objc_setAssociatedObject(self, animatingKey, @(value), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
void objc_setAssociatedObject(id object, void *key, id value, objc_AssociationPolicy policy)