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)