Frage

Ich habe einen Code, der ausgeführt werden muss, wenn die Anwendung endet. Ich registriere meinen Controller für die nsapplicationWillterminatenotifikation wie folgt:

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

Nun, wenn ich meine App starte und sie innerhalb der ersten 20 Sekunden oder so beende, applicationWillTerminate wird angerufen. Wenn ich die Bewerbung später beenden würde, ist dies nicht der Fall. Was könnte in meiner Anwendung dieses Verhalten verursachen? Ich habe auch versucht, meinen Controller als Delegierungen von NSApplication mit denselben Ergebnissen einzurichten. Irgendwelche Ideen?

Vielen Dank.

Oh, und das ist Xcode 3.2, Schneeleopard 10.6.1, der 10.5 SDK verwendet. Passiert sowohl in Debug- als auch in Release -Builds.

War es hilfreich?

Lösung

Es gibt mehrere Gründe, warum dies möglicherweise passieren könnte.

Wenn Sie GC'D ausführen, wird Ihr Beobachter vor der Beendigung gesammelt und abgeschlossen? (Ich sollte dies testen und einen Fehler einreichen, wenn dies der Fall ist, da dies zumindest dokumentiert werden muss)

Stürzt Ihre App still oder ruft exit () direkt ab?

Im Allgemeinen können Sie nicht auf die Beendigung von Benachrichtigungen zählen, da der Benutzer möglicherweise für eine Streitmacht zum Teufel entgegenwirkt.

In Snow Leopard gibt es auch eine Funktion, die als plötzliche Beendigung bezeichnet wird, mit der Ihre App das System mitteilt, dass es sicher ist, die App abzutöten, anstatt die normale Beendigung von Rigamarole zu durchlaufen. Es ist in der dokumentiert NSPROCESSINFO Dokumentation.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top