2012-04-17 5 views
6

Я работаю над проектом в Xcode версии 4.2.1 и в iOS 5.0. Мне интересно, какая функция будет вызываться, когда вы полностью завершаете приложение, а это означает, что даже время, когда пользователи заставляют приложение, работающее на фоне, прекращаться с главного экрана. Я предполагал, чтоКакая функция вызывается, когда приложение iPhone прекращается?

(void)applicationWillTerminate:(UIApplication *)application

будет называться, но оказалось, что он не был вызван даже после завершения приложения на фоне. В основном я хочу назвать метод, который был создан до того, как приложение полностью завершено, поэтому нужно знать, какая функция вызывается в конце приложения.

спасибо.

+0

Не могли бы вы выбрать/отметить галочками один из ответов. –

ответ

1

Если приложение уже приостановлено, оно не получит дальнейших уведомлений. Следите за уведомлением didEnterBackground.

+0

Не могли бы вы сказать, что я не могу понять, что я хочу делать, пока я нахожусь на главном экране? Что касается функции, я не нашел ее, даже видя такую ​​функцию. – Max

+0

-1: Уведомление или сообщение делегата «willSuspend» отсутствует. Вероятно, вы хотите «didEnterBackground». – rickster

+0

Мне это может не понравиться, потому что я хочу вызвать метод, когда приложение полностью завершено, а не при нажатии кнопки «домой». То есть, я не хочу вызывать свой метод, только входя в фон. – Max

0
- (void)applicationWillTerminate:(UIApplication *)application 

Это протокол UIApplicationDelegate.

0

documentation here описывает поведение для этого случая.

Короче говоря, вы получите сообщение applicationWillTerminate:, если приложение работает (на переднем плане или в фоновом режиме), когда оно завершено. Таким образом, если ваше приложение не работает на переднем плане или в одном из длительных фоновых режимов (например, VoIP, аудио или долговременная задача, указанная beginBackgroundTaskWithExpirationHandler), он будет довольно быстро переходить из состояния background в состояние suspended. В этом случае вы никогда не получите сообщение applicationWillTerminate:.

5

Here's a good overview уведомлений о жизненном цикле приложения & сообщения делегатов на iOS 4.0 и новее. Короче говоря ...

Ваше приложение, как правило, никогда не увидит willTerminate, поскольку система обычно прекращает ваше приложение только после того, как оно уже приостановлено (в фоновом режиме). Как только ваше приложение приостановлено, он больше не сможет действовать (*), поэтому для этого нет обратного вызова.

didEnterBackground Сообщение делегата или уведомление должно рассматриваться как ваш последний шанс очистить вещи или сохранить состояние до возможного прекращения.


(*) Хорошо, ваше приложение может сделать вещи, если он находится в одном из поддерживаемых режимов выполнения фона, как аудио, VoIP, или навигация, но в этом случае он либо не был приостановлен или еще это не был приостановлен с точкой входа, специфичной для этого фонового режима.

+0

Так что в случае, когда пользователь принудительно завершает работу приложения на фоне, не было бы хорошего способа вызвать мой метод. Спасибо за помощь. – Max

+0

Возможно, вы даже не получите уведомление; если пользователь не прекратит ваше приложение через коммутатор приложений в течение нескольких секунд после его перехода на задний план, ваше приложение уже будет приостановлено. – rickster

-1

Эти три метода будут полезны:

- (void)applicationWillResignActive:(UIApplication *)application 
    { 
    } 

    - (void)applicationDidEnterBackground:(UIApplication *)application 
    { 
    } 

    - (void)applicationWillTerminate:(UIApplication *)application 
    { 
    } 
18

метод «applicationWillTerminate» будет называться только тогда, когда приложение не в подвешенном состоянии в то же время прекращается.

Чтобы понять это, учитывая настоящее приложение находится на переднем плане активном состоянии пройти через следующие два случая:

Case 1: Когда вы одним нажатием кнопки Home, приложение непосредственно переходит в подвешенном состоянии по телефону методы - (1) applicationWillResignActive, а затем (2) applicationDidEnterBackground.

Теперь, когда вы пытаетесь закрыть или закрыть приложение, дважды нажав кнопку «домой», а затем развернув текущий экран приложения с последних экранов приложений, приложение находится в состоянии «приостановлено». Итак, «applicationWillTerminate» метод не будет вызываться.

Случай 2: Когда вы двойное нажатие кнопки Home, приложение переходит в неактивное состояние с помощью вызова метода - (1) applicationWillResignActive.

Теперь, когда вы пытаетесь выйти из приложения или закрыть приложение, перевернув текущий экран приложения с последних экранов приложений, приложение находится в неактивном состоянии (не в состоянии приостановления) при его завершении. Итак, будет вызван «applicationWillTerminate».

Посмотрите, что говорят Apple: enter image description here

Для получения дополнительной информации об этом взгляде - Apple's Official Documentation on applicationWillTerminate(_:)

+0

Отличный ответ, спасибо! Было бы здорово также иметь ссылку на документацию Apple. –

Смежные вопросы