2017-01-31 8 views
0

私は怒鳴るようなクラスがあります。Invokeメソッド

@interface Validator : NSObject 
- (BOOL)validateParameters:(NSDictionary *)data; 
@end 

と私は動的に似Validatorクラスのオブジェクトを作成しています:今、私はそのvalidateParametersにアクセスしたい

Class validatorClass = NSClassFromString(@"Validator"); 
id _validObject = [[validatorClass alloc] init]; 

:メソッドをその動的オブジェクトで呼び出し側メソッドの戻り値を使用します。

あなたは、動的オブジェクトの割り当てにコードの下に使用することができます事前に感謝:)

+0

ターゲットとセレクタであるので、あなたは、引数を追加する必要は、2指数の使用を開始しますが、 '[_validObject validateParameters:]を試してみましたか;'? – Joshua

+0

戻り値を取得する方法は、解決策を得ました。とにかくありがとう – Batman4Ever

答えて

2

。これは一例です:

Class validatorClass = NSClassFromString(@"Validator"); 
    id _validObject = [[validatorClass alloc] init]; 
    BOOL result = [_validObject performSelector:@selector(validateParameters:) withObject:[NSData data]]; 

また、あなたがNSInvocationクラスを使用することができます。

Class validatorClass = NSClassFromString(@"Validator"); 
    id _validObject = [[validatorClass alloc] init]; 
    NSInvocation* invocation = [NSInvocation invocationWithMethodSignature:[_validObject methodSignatureForSelector:@selector(validateParameters:)]]; 
    invocation.target = _validObject; 
    invocation.selector [email protected](validateParameters:); 
    [invocation setArgument:(__bridge void * _Nonnull)([NSData data]) atIndex:2]; 
    [invocation invoke]; 
    BOOL result; 
    [invocation getReturnValue:&result]; 

注:0と1インデックスは

+0

ありがとう、それは動作します:D – Batman4Ever

0

および方法は、呼び出しObjective-C

で_validObject - >希望

Class validatorClass = NSClassFromString(@"Validator"); 
id _validObject = [[validatorClass alloc] init]; 

//Call with That dynamic Object 
[_validObject validateParameters:[NSDictionary dictionary]]; 

あなたの動的オブジェクトでありますこれは役に立ちます。あなたはパラメータを1つだけ持っている場合

:withObject:あなたは法に

performSelectorを使用することができます

+0

実際に戻り値を得る必要があり、セルゲイの答えが働いた。お返事ありがとうございます – Batman4Ever