2016-07-21 2 views
1

Я делаю это в приложенииWillTerminate, но предупреждение не отображается, только журнал будет напечатан.Можно ли показывать предупреждение, когда приложение убивается?

- (void)applicationWillTerminate:(UIApplication *)application { 
    NSLog(@"Went to Background"); 


    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"app is terminated " delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; 
    [alert show]; 
} 
+1

Как только этот метод называется, он в основном подходит для вашего приложения. Вы ничего не можете отобразить. У вас есть пара секунд, чтобы очистить до того, как ваше приложение будет убито. – Paulw11

ответ

1

Вы не можете этого сделать. Как разрабатываются приложения для iOS, вы не можете заблокировать пользователя от закрытия вашего приложения. Из this ответа:

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

+0

Что произойдет, если вы останетесь в петле и прокачаете петлю? – Droppy

+0

@ Droppy приложение, вероятно, продолжит работать в фоновом режиме, пока оно не будет убито, но оно все равно не покажет предупреждение. – Signo

+0

Но на самом деле это не так, как говорит ваш ответ. Вы просто заявляете, что в этом методе нет блокирующих вызовов, и, следовательно, метод будет завершен, и приложение тоже. Это ничего не говорит о показе предупреждающего листа, и я подозреваю, что это возможно, если вы накачаете правильные события в run-loop. Также почему приложение переходит в фоновый режим, если этот метод не разрешен для завершения? До тех пор, пока iOS не убьет приложение? – Droppy

-1

Через несколько секунд вы можете запланировать локальное оповещение. Это будет показано пользователю.

1

Вкратце, если у вас нет UIApplicationExitsOnSuspend в вашем Info.plist, установленном в YES, в iOS4 и выше нет гарантии, что приложениеWillTerminate будет вызвано.

В документации сказано:

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

(курсив мой.)

Если вам нужно что-то сделать, прежде чем приложение выйдет, вам нужно сделать это в applicationDidEnterBackground :. Нельзя поймать SIGKILL.

+0

И, конечно, если приложение находится в фоновом режиме, оно не может отображать предупреждение о том, собирается ли оно быть убито или нет. – Avi

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