2010-10-08 18 views
5

El siguiente código:La subclase NSControl no puede leer el objetivo?

- (void) setTarget:(id)anObject { 
    NSLog(@"anObject: %@",anObject); 
    [super setTarget:anObject]; 
    NSLog(@"Target: %@",[self target]); 
} 

tiene esta salida:

anObject: <DropZoneViewController: 0x15dd5770> 
Target: (null) 

Se trata de una subclase de NSControl. Entonces, ¿qué estoy haciendo mal?

Lo que estoy tratando de lograr: Tengo un NScontrol que acepta arrastrar objetos. Cuando termina el arrastre, me gustaría enviar la acción del control a su objetivo. ¿Pero cómo obtengo el objetivo de acción & del control si esto anterior no funciona?

Respuesta

13

NSControl no almacena su propio objetivo, eso es lo que se supone que debe hacer su célula.

Así que hay dos razones que esto podría fallar:

  1. El control no tiene una celda
    En este caso, usted debe crear una subclase de NSActionCell para implementar su control. Su subclase de NSControl no debe hacer mucho además de configurar la celda.
    Si no desea hacerlo de la manera correcta mediante el uso de NSCell, tendrá que agregar variables de instancia a su subclase NSControl para almacenar el destino y la acción y anular los captadores y definidores para usarlos.

  2. Su celda no es una subclase de NSActionCell. Un NSCell normal tampoco almacena un objetivo.
    Si está usando una celda personalizada que no es una subclase de NSActionCell, simplemente cámbiela para que herede de NSActionCell en lugar de . Si no puede hacer esto (por ejemplo, porque está subclasificando una subclase NSCell que no puede cambiar), tendrá que agregar las variables de instancia para el destino y el selector a su clase de celda y anular sus configuradores y captadores.

Cuestiones relacionadas