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.