подобная method_missing функциональность в target-c (т.е. динамическое делегирование во время выполнения) - PullRequest
1 голос
/ 08 января 2011

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

Например, я бы хотел следующее:

[obj foo]

делегировать:

[obj getAttribute: @"foo"]

(Я бы хотел сделать это динамически, так как заранее не знаю, какими будут имена или атрибуты этих методов).

Я вижу, что есть крюк в:

 - (id) forwardingTargetForSelector: (SEL) aSelector

Это, кажется, работает только для делегирования, однако я хочу сохранить объект как "себя" и преобразовать аргументы метода.

Где мне искать такого рода поведение? Это вообще возможно в obj-c?

1 Ответ

6 голосов
/ 08 января 2011

Вы можете использовать метод -forwardInvocation: для этого. Он принимает полный NSInvocation объект, который представляет вызов метода, и вы можете обрабатывать его так, как пожелаете. Если вы сделаете это, вам также следует переопределить -methodSignatureForSelector:, чтобы вернуть правильный NSMethodSignature (требуется для -forwardInvocation: для работы с неизвестными селекторами). Также рекомендуется переопределить -respondsToSelector:, чтобы объявить, что вы можете обрабатывать данный селектор.

...