2010-01-30 17 views
12

Qualcuno potrebbe spiegare come fare per ottenere i valori passati a un metodo inesistente che viene intercettato quando si utilizza:Come valori degli argomenti da NSInvocation

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

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

Dato un messaggio del tipo:

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

Posso ottenere la firma del metodo senza problemi ma sono terribilmente confuso su come ottenere i valori che sono stati passati con esso.

Sono completamente fuori di base quando dovrei usare questi metodi o mi manca qualcosa?

risposta

32

-[NSInvocation getArgument:atIndex:]

Quindi nel tuo caso, è necessario utilizzare le cose come:

__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); 

Ricordate che self e _cmd sono argomenti 0 e 1.

+0

che era, grazie! –

+5

Do firstArgument e secondArgument devono essere __unsafe_unretained sotto ARC? – pshah

+0

@pshah Assolutamente, il tuo commento ha risolto il problema di debug delle ultime ore. Grazie! – Joshua

Problemi correlati