Implicit conversion of 'BOOL' (aka 'si

2019-06-25 23:02发布

问题:

I am using an associated reference as storage for a property of my category

header file contains :

@interface UIImageView (Spinning)

@property (nonatomic, assign) BOOL animating;

@end

implementation is

- (void)setAnimating:(BOOL)value {
    objc_setAssociatedObject(self, animatingKey, value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

However, I am getting the warning for the line above

Implicit conversion of 'BOOL' (aka 'signed char') to 'id' is disallowed with ARC

if you know what I am doing wrong here, please help how to avoid this problematic

回答1:

The objc_setAssociatedObject function expects an Objective-C object for the 3rd parameter. But you are trying to pass in a non-object BOOL value.

This is no different than trying to add a BOOL to an NSArray. You need to wrap the BOOL.

Try:

objc_setAssociatedObject(self, animatingKey, [NSNumber numberWithBool:value], OBJC_ASSOCIATION_RETAIN_NONATOMIC);

Of course you will need to extract the BOOL value from the NSNumber when you get the associated object later.

Update: Using modern Objective-C you can do:

objc_setAssociatedObject(self, animatingKey, @(value), OBJC_ASSOCIATION_RETAIN_NONATOMIC);


回答2:

void objc_setAssociatedObject(id object, void *key, id value, objc_AssociationPolicy policy)

objc_setAssociatedObject accepts id type of value as third parameter and you are trying to pass BOOL to it. So make conversion as needed.