2011-08-04 10 views

Respuesta

5

El método forwardInvocation es lo que va a querer usar. Se llama automáticamente cuando se invoca un selector inexistente en un objeto. El comportamiento predeterminado de este método es llamar al doesNotRecognizeSelector: (que es lo que genera la información de depuración en su consola), pero puede anularlo para hacer lo que desee. Un enfoque recomendado por Apple es hacer que este método envíe la invocación del método a otro objeto.

- (void)forwardInvocation:(NSInvocation *)anInvocation 

Tenga en cuenta que forwardInvocation es una operación bastante costosa. Un objeto NSInvocation necesita ser creado por el framework y (opcionalmente) usado para invocar un selector en otra instancia. Si está buscando un método (relativamente) más rápido para detectar selectores que no existen, puede optar por implementar forwardingTargetForSelector.

- (id)forwardingTargetForSelector:(SEL)aSelector 

Usted debe Apple's documentation de cómo reemplazar estos métodos efectivamente, hay algunas pifias a tener en cuenta, sobre todo cuando reemplazando el método forwardInvocation en el mismo objeto que tendrá los selectores que faltan.

+1

El mecanismo de reenvío del método de clase requiere métodos de clase, no métodos de instancia. '+ (void) forwardingTargetForSelector: (SEL) sel;' '+ (void) forwardInvocation: (NSInvocation *) anInvocation;' La función más adelante utiliza una función de soporte: '+ (NSMethodSignature *) methodSignatureForSelector: (SEL) sel; ' – dmitri

Cuestiones relacionadas