Sto studiando il "forwarding del messaggio" di Objective-C. Scrivo un programma di test per verificare se posso "inghiottire" un selettore non riconosciuto in fase di esecuzione. Quindi ho fatto questo:Come posso "inghiottire" l'errore "selettore non riconosciuto" inoltrando i messaggi?
- (void) forwardInvocation: (NSInvocation *) anInvocation {
if ([anInvocation selector] == @selector(testMessage)){
NSLog(@"Unknow message");
}
return;
}
Ma getta ancora l'errore "non riconosciuto selettore" in fase di esecuzione. Dopo la ricerca la risoluzione so che ho bisogno di ignorare il metodo "methodSignatureForSelector:", quindi scrivo un'altra classe proxy chiamato "Proxy" e il seguente metodo:
(NSMethodSignature *)methodSignatureForSelector:(SEL)selector {
if ([Proxy instancesRespondToSelector: selector]) {
return [Proxy instanceMethodSignatureForSelector: selector];
}
return [super methodSignatureForSelector:selector];
}
Ma, in realtà, non voglio implementare tale altra classe proxy per realizzare questo metodo. Tutto quello che voglio fare è ignorare questo selettore sconosciuto. Ma se mi basta digitare questo, non funziona:
(NSMethodSignature *)methodSignatureForSelector:(SEL)selector {
return [super methodSignatureForSelector:selector];
}
Quindi, mi chiedo c'è alcun modo che possa semplicemente "ingoiare" questo errore? (Non utilizzo gestore di eccezioni, voglio un modo "forwarding" -like). Grazie!
Cfr. http://stackoverflow.com/a/11531609/ –