J'écris des préférences pour mon application qui l'enregistre pour le lancement lors de la connexion (en utilisant LSSharedItemList
API). Tout se passe bien et mon application affiche sa présence dans les éléments de connexion de l'utilisateur sur l'état de la case à cocher. Maintenant, je veux aborder un autre problème lorsque l'utilisateur supprime réellement l'application de "Connexion des éléments" dans Accounts.prefPane
. Utilisation de Notification Watcher Je vois que le centre de notification distribué envoie la notification com.apple.loginItemsListDidChnage
(attention au typo), donc j'ajoute un observateur pour cette notification avec le même sélecteur (qui est IBAction
) qui gère la case à cocher dans la fenêtre de préférences (qui, en fait, [un ] enregistre l'application depuis/vers les éléments de connexion).NSConcreteNotification est reçu, mais pas défini?
Le problème apparaît lorsque j'essaie de comparer la classe de l'expéditeur de l'action qui fait basculer mon application en tant qu'élément de connexion. En utilisant [sender description]
et [sender class]
je vois NSConcreteNotification
classe, mais dès que j'essaie de faire rapport sur elle - pauses de code dire qu'il n'y a pas de classe définie:
if ([[sender class] isEqualTo:[NSConcreteNotification class]]) {
...
}
Si je tente de comparer l'expéditeur à NSNotification
- puis couler ne tombe pas dans cette branche.
Peut-être qu'il me manque des connaissances essentielles sur les notifications distribuées dans Mac OS X?
Mac OS X 10.6.2
Sans parler que je ne pense pas 'isEqualTo:' est disponible en tant que méthode de classe, ce qui devrait jeter un does-sans but réponse à l'exception du sélecteur. (Et même la version de l'instance est pour les scripts http://developer.apple.com/mac/library/documentation/cocoa/Reference/Foundation/Protocols/NSComparisonMethods_Protocol/ Pour des raisons générales, vous utiliserez 'isEqual:'.) Si il était approprié de tester si c'est exactement la même classe, vous utiliseriez l'opérateur '==' ici. –