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

2

5

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

Rahm answered 17/2, 2013 at 4:58 Comment(0)
H
19

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);
Halpin answered 17/2, 2013 at 5:5 Comment(0)
C
0
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.

Coltin answered 17/2, 2013 at 5:8 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.