调用动态对象的方法

时间:2017-01-31 09:01:13

标签: ios objective-c dynamic-programming

我有一个类似下面的课程:

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

我正在动态创建Validator类的对象:

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

现在我想访问那个validateParameters:方法,并使用调用方法中的返回值和该动态对象。

提前致谢:)

2 个答案:

答案 0 :(得分:2)

您可以使用方法

  

performSelector:withObject:

如果您只有一个参数。这是一个例子:

  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 =@selector(validateParameters:);
  [invocation setArgument:(__bridge void * _Nonnull)([NSData data]) atIndex:2];
  [invocation invoke];
  BOOL result;
  [invocation getReturnValue:&result];

注意:您需要添加以2索引开头的参数,因为0和1索引是目标和选择器

答案 1 :(得分:0)

您可以在Objective-C

中使用以下代码进行动态对象分配和方法调用
  

_validObject - >是你的动态对象

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

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

希望这会有所帮助。