简体   繁体   中英

Implicit conversion of 'BOOL' (aka 'signed char') to 'id' ,objc_setAssociatedObject

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

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);
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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM