5

カテゴリのプロパティのストレージとして関連する参照を使用しています

ヘッダーファイルに含まれるもの:

@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

私がここで間違っていることを知っているなら、この問題を回避する方法を助けてください

4

2 に答える 2

19

このobjc_setAssociatedObject関数は、3番目のパラメーターにObjective-Cオブジェクトを想定しています。しかし、オブジェクト以外の値を渡そうとしていBOOLます。

これは、にを追加しようとするのと同じBOOLですNSArray。をラップする必要がありBOOLます。

試す:

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

もちろん、後で関連付けられたオブジェクトを取得するときに、BOOLから値を抽出する必要があります。NSNumber

更新:最新のObjective-Cを使用すると、次のことができます。

objc_setAssociatedObject(self, animatingKey, @(value), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
于 2013-02-17T05:05:21.957 に答える
0
void objc_setAssociatedObject(id object, void *key, id value, objc_AssociationPolicy policy)

objc_setAssociatedObjectは、3番目のパラメーターとしてidタイプの値を受け入れ、BOOLを渡そうとしています。したがって、必要に応じて変換を行います。

于 2013-02-17T05:08:16.183 に答える