昨日の続き。
なんのことはない +[NSObject instanceMethodSignatureForSelector:] を使えばシグネチャの問題は解決した。
NSObject Class Reference - instanceMethodSignatureForSelector:
昨日のコード
NSMethodSignature* signature = [self methodSignatureForSelector:selector];
新コード
NSMethodSignature* signature = [[self.target class] instanceMethodSignatureForSelector:selector];
実行時にクラス情報を得て、それに対して instanceMethodSignatureForSelector: を投げてやればいい。
最終的なコードはこんなかんじ。
SEL selector = @selector(hotkeyShouldChange:);
NSMethodSignature* signature = [[self.target class] instanceMethodSignatureForSelector:selector];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
BOOL result;
[invocation setSelector:selector];
[invocation setTarget:self.target];
[invocation setArgument:&_hotkey atIndex:2];
[invocation invoke];
[invocation getReturnValue:&result];
if (result) {
: