Domanda

Ho qualche codice che deve essere eseguito quando l'applicazione termina. Possibile registrare il controller per la NSApplicationWillTerminateNotification come segue:

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

Ora, se mi metto la mia app e uscire entro i primi 20 secondi o giù di lì, applicationWillTerminate viene chiamato. Se ho smesso l'applicazione in seguito, non è così. Ciò che nella mia applicazione potrebbe causare questo comportamento? Ho cercato anche di impostare il mio controller come delegato del NSApplication con gli stessi risultati. Qualche idea?

Grazie.

Oh, e questo è XCode 3.2, Snow Leopard 10.6.1, utilizzando 10.5 SDK. Accade in entrambi Debug e Release costruisce.

È stato utile?

Soluzione

Ci sono diversi motivi per cui questo potrebbe accadere.

Se si esegue GC'd, fa il tuo osservatore ottiene raccolte e finalizzato prima della cessazione succede? (Dovrei provare questo e inviare un bug se lo fa come che almeno deve essere documentato)

È il vostro app in silenzio crash o chiamando exit () direttamente?

In generale, non si può contare sulla notifica di cessazione di essere ricevuto come l'utente potrebbe andare a fare una forza di uscire per il gusto di farlo.

Inoltre, in Snow Leopard, v'è una funzione chiamata cessazione improvvisa che permette la vostra applicazione per consentire al sistema di sapere che è sicuro di uccidere l'applicazione invece di passare attraverso il normale manfrina di terminazione. È documentato nel NSProcessInfo documentazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top