2009-11-12 7 views
1

J'ai une petite application OSX Cocoa qui affiche simplement un IKPicutreTaker et enregistre l'image dans un fichier si celui-ci est défini. J'utilise applicationShouldTerminateAfterLastWindowClosed: pour fermer l'application lorsque le PictureTaker est fermé. Cela fonctionne très bien quand je choisis (c'est fait quand vous avez choisi l'image que vous voulez) ou quand vous cliquez sur annuler, mais quand je clique sur la flèche rouge en haut à gauche des fenêtres, l'application ne se ferme pas quand la fenêtre est fermée de cette façon. Est-ce que cette fonctionnalité est prévue ou est-ce que je fais quelque chose de mal (ne pas mettre un drapeau?). Aussi, est-il possible de désactiver ce bouton?applicationShouldTerminateAfterLastWindowClosed: ne semble pas fonctionner lorsque le x rouge est utilisé pour fermer mon application Cocoa

Répondre

2

Cliquer sur le bouton rouge ne ferme pas une application, en partie parce que ce verbe ne va pas avec ce nom. Le bouton rouge ferme la fenêtre. il ne quitte pas votre application. (Une application peut avoir et aura souvent plusieurs fenêtres sous Mac OS X.)

C'est là que applicationShouldTerminateAfterLastWindowClosed: entre en jeu. Chaque fois que l'utilisateur ferme la dernière fenêtre de l'écran (soit en cliquant sur le bouton rouge, en choisissant Fermer dans le fichier menu, ou par d'autres moyens), l'objet NSApplication enverra un message applicationShouldTerminateAfterLastWindowClosed: à son délégué, pour lui demander si l'application doit se terminer. Si le délégué répond au message en renvoyant YES, l'application se termine automatiquement. Vous ne dites pas exactement comment vous "utilisez" applicationShouldTerminateAfterLastWindowClosed:. Si vous ne faites que l'envoyer à un objet, cela ne fonctionnera pas, parce que vous posez une question ("l'application devrait-elle se terminer après la fermeture de la dernière fenêtre?"), Puis en ignorant la réponse. Si vous implémentez la méthode dans un objet, mais que cet objet n'est pas le délégué de l'application, cela ne fonctionnera pas non plus: l'objet application envoie uniquement ce message à son délégué.

Vous devez implémenter la méthode dans votre délégué et renvoyer YES lorsqu'il est approprié que l'application se termine lorsque l'utilisateur ferme sa dernière fenêtre.

Questions connexes