Вопрос

У меня есть какой -то код, который необходимо запустить при завершении приложения. Я регистрирую свой контроллер для NSApplicationWillTermInateNotification следующим образом:

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

Теперь, если я запустим свое приложение и брошу его в течение первых 20 секунд или около того, applicationWillTerminate называется. Если я покину приложение позже, это не так. Что в моем приложении может вызвать такое поведение? Я также попытался настроить свой контроллер в качестве делегата NSApplication с теми же результатами. Любые идеи?

Спасибо.

О, и это Xcode 3.2, Snow Leopard 10.6.1, используя 10,5 SDK. Происходит в сборке отладки и выпуска.

Это было полезно?

Решение

Есть несколько причин, почему это может произойти.

Если вы запускаете GC'D, ваш наблюдатель собирается и завершается до завершения завершения? (Я должен проверить это и подать ошибку, если это так, как по крайней мере, нужно задокументировать)

Ваше приложение молча сбои или вызовов () напрямую?

В целом, вы не можете рассчитывать на получение уведомления о прекращении, поскольку пользователь может выбрать силу, черт возьми, черт возьми.

Кроме того, в Snow Leopard есть функция, называемая внезапным завершением, которая позволяет вашему приложению сообщать системе, что безопасно убить приложение вместо того, чтобы проходить нормальное прекращение Rigamarole. Это задокументировано в Nsprocessinfo документация.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top