Search code examples
iosobjective-cobjective-c-category

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


Solution

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