2010-01-30 10 views
12

Könnte jemand bitte erklären, wie über das Erhalten den Wertes auf eine nicht existierende Methode übergeben zu gehen, die abgefangen wird bei der Verwendung von:Erstes Argument Werte von NSInvocation

+ (void)forwardInvocation:(NSInvocation *)anInvocation; 

+ (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector; 

Bei einer Meldung wie:

[SomeClass doSomething:@"theThing" withSomething:@"aParam"]; 

Ich kann die Methodensignatur ohne ein Problem bekommen, aber ich bin schrecklich verwirrt darüber, wie man die Werte erhält, die damit übergeben wurden.

Bin ich völlig in der Basis, wenn ich diese Methoden verwenden sollte oder nur etwas fehlt?

Antwort

32

-[NSInvocation getArgument:atIndex:]

Also in Ihrem Fall würde es Ihnen gefällt verwenden:

__unsafe_unretained NSString * firstArgument = nil; 
__unsafe_unretained NSString * secondArgument = nil; 
[theInvocation getArgument:&firstArgument atIndex:2]; 
[theInvocation getArgument:&secondArgument atIndex:3]; 
NSLog(@"Arguments: %@ and %@", firstArgument, secondArgument); 

Denken Sie daran, dass self und _cmd Argumente sind 0 und 1.

+0

, die es war, danke! –

+5

Müssen firstArgument und secondArgument __unsafe_unreteaded unter ARC sein? – pshah

+0

@pshah Absolut, Ihr Kommentar hat das Problem gelöst, das ich in den letzten paar Stunden behoben habe. Vielen Dank! – Joshua

Verwandte Themen