Atrapar un mensaje indefinido en OBJC y reenviarlo a un método con una firma diferente
-
25-10-2019 - |
Pregunta
Estoy escribiendo una clase de registrador (¿quién no?) Con un método
- (void) logWithTag:(NSString *)aTag andMessage:(NSString *)aMsg;
Deseo poder reenviar mensajes indefinidos a este método. Por ejemplo :
[myLogger logFoo:@"bar"] should call [myLogger logWithTag:@"Foo" andMessage:@"bar"]
y más genéricamente
[myLogger logXXX:@"bar"] should call [myLogger logWithTag:@"XXX" andMessage:@"bar"]
He mirado resolveInstanceMethod
y reenvío de mensajes, pero por lo que entendí, todos esperan que el método tenga la misma firma.
Alguna idea ? Gracias !
Solución
Apple cubre esto en el Objective-C Runtime Programming Guide
. Básicamente necesitas anular respondsToSelector:
y devuelva sí si desea admitir el método. Entonces también anular forwardInvocation:
y luego capture la cadena del selector, elimine el prefijo de registro y cree un nuevo NSInvocation
que llamará logWithTag:andMessage:
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow