ios - 动态对象的调用方法

标签 ios objective-c dynamic-programming

我有一个类如下:

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

我正在动态地创建一个 Validator 类的对象,例如:

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

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

提前致谢:)

最佳答案

你可以使用方法

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 索引是目标和选择器

关于ios - 动态对象的调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41953382/

相关文章:

iphone - NSDecimalNumber 用于 iPhone 上的大数运算

iphone - 如何删除以前版本的 iPhone 应用程序存储的所有文件?

ios - 当 UITabBar 不是 rootViewController 时,如何以编程方式将 UITabBar 与带有 NIB 的不同 ViewController 链接

ios - 同步执行多个动画的最佳方式

ios - 将 WCSession 的委托(delegate)设置为 nil

algorithm - 一维动态规划的懒惰打结

c++ - 跳转到最后一个元素的最大方式数

ios - ALAssetRepresentation URL 'persistence' 生命周期?

ios - XCode 11.4.1 补丁后 Swift 应用程序无法找到 ObservableObject

math - 返回格式 x^y 的第 i 个数字,其中 x 和 y 是整数