クラスメソッドとセレクターに NSClassFromString と NSSelectorFromString を使用して呼び出しを構築したいと思います。次の方法で呼び出しを構築しようとしました。
NSMethodSignature *signature;
NSInvocation *inv;
Class targetClass = NSClassFromString(@"NSString");
SEL selector = NSSelectorFromString(@"stringWithString:");
id arg = @"argument";
Method method = class_getInstanceMethod(targetClass, selector);
// コードを実行するとメソッドが nil になるのはなぜですか?
struct objc_method_description* desc = method_getDescription(method);
if (desc == NULL || desc->name == NULL){
return nil;
}
signature = [NSMethodSignature signatureWithObjCTypes:desc->types];
inv = [NSInvocation invocationWithMethodSignature:signature];
[inv setSelector:selector];
[inv setArgument:&arg atIndex:2];
[inv invoke];
__autoreleasing id returnObj;
[inv getReturnValue:&returnObj]; // get created object
「メソッド」は常に「nil」であるため、このアプローチは機能しません。なんで?
上記のコードの呼び出しを介してクラス メソッドを実行する適切な方法は何ですか?