Перехват неопределенного сообщения в ObjC и пересылка его методу с другой подписью - PullRequest
3 голосов
/ 25 июля 2011

Я пишу класс логгера (а кто нет?) С методом

- (void) logWithTag:(NSString *)aTag andMessage:(NSString *)aMsg;

Я хочу пересылать неопределенные сообщения этому методу. Например:

[myLogger logFoo:@"bar"] should call [myLogger logWithTag:@"Foo" andMessage:@"bar"]

и более обобщенно

[myLogger logXXX:@"bar"] should call [myLogger logWithTag:@"XXX" andMessage:@"bar"]

Я смотрел на resolveInstanceMethod и пересылку сообщений, но из того, что я понял, все ожидают, что метод будет иметь одинаковую подпись.

Есть идеи? спасибо!

1 Ответ

3 голосов
/ 25 июля 2011

Apple покрывает это в Objective-C Runtime Programming Guide. В основном вам нужно переопределить respondsToSelector: и вернуть YES, если вы хотите поддержать метод. Затем также переопределите forwardInvocation: и затем захватите строку селектора, удалите префикс журнала и создайте новый NSInvocation, который будет вызывать logWithTag:andMessage:

...