Question

J'ai un code qui doit être exécuté lorsque l'application se termine. Enregistrer mon contrôleur pour le NSApplicationWillTerminateNotification comme suit:

[[NSNotificationCenter defaultCenter] 
    addObserver: self
       selector: @selector(applicationWillTerminate:)
           name: NSApplicationWillTerminateNotification
         object: nil];

Maintenant, si je commence mon application et le quitte dans les 20 premières secondes environ, applicationWillTerminate est appelée. Si je quitte l'application plus tard, il ne fonctionne pas. Que dans ma demande pourrait provoquer ce problème? J'ai aussi essayé de mettre en place mon contrôleur en tant que délégué de NSApplication avec les mêmes résultats. Des idées?

Merci.

Oh, et c'est XCode 3.2, Snow Leopard 10.6.1, en utilisant 10,5 SDK. Qui se passe dans les deux Debug et Release builds.

Était-ce utile?

La solution

Il y a plusieurs raisons pour lesquelles cela pourrait se produire.

Si vous utilisez GC'd, votre observateur se recueillir et finalisé avant la fin arrive? (Je le tester et déposer un bug si elle fait comme qui doit au moins être documenté)

Votre application s'écraser en silence ou en appelant exit () directement?

En général, vous ne pouvez pas compter sur la notification de résiliation est reçue en tant que l'utilisateur peut aller pour une force quit pour le plaisir de le faire.

En outre, dans Snow Leopard, il y a une fonctionnalité appelée rupture brutale qui permet à votre application pour laisser le système savoir qu'il est sûr de tuer l'application au lieu de passer par le rigamarole de terminaison normale. Il est documenté dans le NSProcessInfo documentation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top