2010-10-08 9 views
5

Le code suivant:La sous-classe NSControl ne peut pas lire la cible?

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

a cette sortie:

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

Ceci est dans une sous-classe de NSControl. Alors qu'est-ce que je fais mal?

Ce que j'essaye de réaliser: J'ai un NScontrol qui accepte des objets de glisser. Lorsque le glisser se termine, j'aimerais envoyer l'action du contrôle à sa cible. Mais comment puis-je obtenir l'action du contrôle & cible si cela ne fonctionne pas?

Répondre

13

NSControl ne stocke pas sa propre cible, c'est ce que la cellule est censée faire.

Donc, il y a deux raisons cela pourrait échouer:

  1. Votre commande ne doit pas une cellule
    Dans ce cas, vous vraiment créer une sous-classe de NSActionCell pour mettre en œuvre votre contrôle. Votre sous-classe de NSControl ne devrait pas faire grand chose en plus de mettre en place la cellule.
    Si vous ne voulez pas le faire correctement en utilisant un NSCell vous devrez ajouter des variables d'instance à votre sous-classe NSControl pour stocker la cible et l'action et ignorer les getters et setters pour les utiliser.

  2. Votre cellule n'est pas une sous-classe de NSActionCell. Un NSCell ne mémorise pas non plus de cible.
    Si vous utilisez une cellule personnalisée qui n'est pas une sous-classe de NSActionCell, modifiez-la simplement pour qu'elle hérite de NSActionCell au lieu de NSCell. Si vous ne pouvez pas le faire (par exemple parce que vous sous-classes une sous-classe NSCell vous ne pouvez pas changer), vous devrez ajouter les variables d'instance pour la cible et le sélecteur à votre classe de cellules et remplacer ses setters et getters.

Questions connexes