4

performSelector:オブジェクトを返す、を使用して、id他のいくつかのメソッドを呼び出しています。これらのメソッドの戻り型は、実際には、、、BOOLまたはその他の種類のオブジェクトのいずれかです。intNSDate

performSelector:から返されたオブジェクトがであるかどうかをどのように判断できBOOLますか?に変換してみましたNSNumberが、オブジェクトが。でない場合はクラッシュしますBOOL

次のような属性を持つクラスがあります。

@property(retain,nonatomic) NSString* A;
@property(assign,nonatomic) BOOL B;
@property(retain,nonatomic) NSArray* C;
@property(assign,nonatomic) int64_t D;

このクラスはフレームワークによって生成されるため、変更できません。Aしかし、、、、をループして、各属性を呼び出しB、データを取得したいと思います。ただし、ご覧のとおり、返品の種類はさまざまであるため、それに合わせる必要があります。CD

私は次のようなことをしています:

SEL s = NSSelectorFromString(@"A");
id obj = [object performSelector:s];
//check if obj is BOOL
//do something with obj
4

1 に答える 1

9

さまざまなプロパティの値を取得するだけの場合は、キー値コーディングを使用します。これにより、などのスカラー型が自動的にラップさintBOOLますNSNumber。したがって、必要なのは次のような行だけです。

id value = [object valueForKey:@"somePropertyName"];

それ以外の場合は、ターゲットオブジェクトを呼び出すことで、リターンタイプを事前に確認できますが、methodSignatureForSelector:説明した状況を考えると、これは多くの不要な作業のように見えます。

于 2013-01-22T18:22:25.287 に答える