2010-05-27 2 views
0

En supposant que button1 est un NSPopUpButton En supposant que le menu associé au bouton 1 est affiché et qu'il est suivi.rejectPopUp n'est pas reconnu

[[button1 cell] dismissPopUp] --- Le paramètre dismissPopUp n'est pas reconnu.

Pourquoi la méthode dismissPopUp n'est-elle pas reconnue?

Merci

Répondre

0

Parce que NSCells ne répondent pas aux dismissPopUp messages.

Si vous obtenez cela comme une exception au moment de l'exécution, assurez-vous que button1 est vraiment un bouton pop-up, c'est-à-dire, assurez-vous que vous avez branché cette sortie au bon objet dans IB, ou que vous avez assigné bon objet là si vous l'avez créé dans le code. Dans ce dernier cas, utilisez le débogueur pour examiner la variable.

Si c'est juste un avertissement que vous obtenez du compilateur, c'est probablement parce que cell est une méthode de NSControl (super-superclasse de NSPopUpButton), et est tapé comme retournant un NSCell. Le compilateur n'a aucun moyen de savoir que ce contrôle particulier retournera un NSPopUpButtonCell. La solution est d'affecter le résultat du message cell à une variable de type NSPopUpButtonCell *, puis envoyer le message dismissPopUp à l'objet dans cette variable:

NSPopUpButtonCell *cell1 = [button1 cell]; 
[cell1 dismissPopUp]; 

Si vous obtenez toujours l'avertissement, vous devrez ajouter une distribution explicite devant l'expression [button1 cell].