オブジェクトではない引数で NSInvocation を使用しているときに問題に直面しています。私が渡す単純な整数値は、別のものに変更されます。
これが私が呼び出しているメソッドです:
+(NSString*) TestMethod2 :(int32_t) number
{
NSLog(@"*************** %d ******************", number);
return @"success";
}
そして、これは私がそれを呼んでいる方法です:
-(void) TestInvocationUsingReflection
{
id testClass = NSClassFromString(@"TestClass");
NSMethodSignature * methodSignature = [testClass methodSignatureForSelector:@selector(TestMethod2:)];
NSInvocation *inv = [NSInvocation invocationWithMethodSignature:methodSignature];
[inv setSelector:@selector(TestMethod2:)];
[inv setTarget:testClass];
NSNumber * arg = [NSNumber numberWithInt:123456];
[inv setArgument:&arg atIndex:2]; //arguments 0 and 1 are self and _cmd respectively, automatically set by NSInvocation
[inv retainArguments];
NSUInteger length = [[inv methodSignature] methodReturnLength];
id result = (void *)malloc(length);
[inv invoke];
[inv getReturnValue:&result];
}
結果は、ログに記録されるのは、私が渡す単純な 123456 値ではなく、次のようなものです。
** * ***180774176** * ** * ***
私が間違っているのは何ですか?
私はObjective Cにはかなり慣れていませんが、実行時に制御できないメソッドを呼び出す必要があります。また、引数の型として int64_t を取ります。
誰でも助けてください。ありがとう....