2013-02-17 49 views
4

我使用我的類的屬性相關的參考作爲存儲「BOOL」(又名「符號字符」),以「身份證」的隱式轉換,objc_setAssociatedObject

頭文件包含:

@interface UIImageView (Spinning) 

@property (nonatomic, assign) BOOL animating; 

@end 

實現

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

不過,我收到預警線之上

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

,如果你知道我做錯了,請幫忙如何避免這個問題

回答

19

objc_setAssociatedObject功能預計,第三個參數的Objective-C的對象。但是您正嘗試傳遞非對象BOOL的值。

這與嘗試將BOOL添加到NSArray沒有區別。你需要包裝BOOL

嘗試:

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

當然,你將需要提取從NSNumberBOOL值,當你以後得到相關的對象。

更新:用現代的Objective-C,你可以這樣做:

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

objc_setAssociatedObject接受ID類型的值作爲第三個參數,你試圖傳遞BOOL它。所以根據需要進行轉換。

相關問題