5

我正在使用关联引用作为我的类别属性的存储

头文件包含:

@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

如果你知道我在这里做错了什么,请帮助如何避免这个问题

4

2 回答 2

19

objc_setAssociatedObject函数需要一个 Objective-C 对象作为第三个参数。但是您正试图传入一个非对象BOOL值。

这与尝试将 a 添加BOOLNSArray. 您需要将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);
于 2013-02-17T05:05:21.957 回答
0
void objc_setAssociatedObject(id object, void *key, id value, objc_AssociationPolicy policy)

objc_setAssociatedObject 接受 id 类型的值作为第三个参数,并且您正在尝试将 BOOL 传递给它。所以根据需要进行转换。

于 2013-02-17T05:08:16.183 回答