applicationWillTerminate не вызывается - PullRequest
1 голос
/ 01 декабря 2010

Я хочу сохранить свои данные до завершения, поэтому мой класс AppControll соответствует протоколу NSApplicationDelegate и объявил метод;и в конструкторе интерфейса я привязал выход делегата окна к AppController, но не могу вызвать метод.

Где я ошибаюсь, что мне делать?

Ответы [ 4 ]

9 голосов
/ 01 декабря 2010

Вы заканчиваете приложение из Xcode?В качестве альтернативы, разрешено ли внезапное завершение в вашем Info.plist?

Любой из них вызовет отправку приложению сигнала SIGTERM, который немедленно прекратит работу, и у экземпляра NSApplication не будет возможности отправить свой делегатсообщение applicationWillTerminate:.(Это момент внезапного завершения: ваше приложение мгновенно умирает . Вы можете выключить и включить его программным способом в те моменты, когда это будет плохо.)

Попробуйте выйти из приложения внутри себя (пункт «Выйти» в меню «Приложение») или с помощью Dock, чтобы выйти из него (щелкните правой кнопкой мыши плитку приложения и выберите «Выйти»).Пока внезапное завершение отключено (или никогда не было включено), любой из них приведет к тому, что объект приложения отправит сообщение applicationWillTerminate:.

Также убедитесь, что вашему делегату отправляются другие сообщения приложения-делегата,например, applicationWillFinishLaunching:, и убедитесь, что вы подключили розетку в правильном наконечнике (вашем наконечнике MainMenu).

4 голосов
/ 01 декабря 2010

Вы не забыли добавить обработчик в приложение?

UIApplication *app = [UIApplication sharedApplication];
[[NSNotificationCenter defaultCenter] 
   addObserver:self
   selector:@selector(applicationWillTerminate:)
   name:UIApplicationWillTerminateNotification object:app];
2 голосов
/ 01 декабря 2010

Многозадачность все еще включена? Это может быть проблемой - нажатие кнопки home не вызывает applicationWillTerminate:, если приложение уходит в фоновый режим.

1 голос
/ 09 февраля 2015

В applicationWillFinishLaunching: добавить:

[[NSNotificationCenter defaultCenter]
    addObserver:self
    selector:@selector(applicationWillTerminate:)
    name:UIApplicationWillTerminateNotification object:nil];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...