Как предотвратить сброс приложений iOS после изменения разрешений камеры?

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

  1. открыть приложение, которое использует разрешение камеры.
  2. перейдите к некоторому экрану в приложении (так что вы можете заметно увидеть обновление позже)
  3. перейдите в приложение "Настройки", перейдите к настройкам приложения и переключитесь камера разрешите!--6-->
  4. дважды щелкните home и вернитесь в приложение. Через несколько секунд он будет обновляться, возвращая вас к первый экран

Примечание: я использую iPhone 6 под управлением iOS 8.4

Я заметил это поведение во всех приложениях, которые имеют разрешение камеры. Мой вопрос: есть ли способ предотвратить обновление/перезапуск приложения (при возобновлении) после изменения разрешения камеры? Кажется, что это не происходит при переключении например, службы определения местоположения, и с точки зрения удобства использования это ужасно.

сценарий пользователей: если пользователь переходит глубже в приложении, тогда нужно изменить разрешение камеры (потому что говорят, что они случайно нажали не последний раз), они будут вынуждены вернуться к этому экрану, когда они вернутся. Это особенно вредно для приложения, пытающегося продать вам что-то или зарегистрировать вас для новой учетной записи. Они могут попытаться ввести новую функцию, где вы можете используйте камеру, чтобы сделать фотографию или скан вашей кредитной карты. Поскольку пользователь не знал об этой функции, они могли ранее отказать в доступе к камере, но теперь хотят ее включить. После попытки восстановить, они возвращаются к вашему приложению, чтобы найти, что они должны потратить 5 + минут регистрации / совершения покупки, снова! После этого даже я, вероятно, сдамся.

2 ответов


Я уверен, что нет никаких других способов предотвратить перезапуск приложения. На самом деле вы получите сообщение SIGKILL, но не журнал сбоев при переключении настроек. Смотрите ниже ссылки -

единственный способ предотвратить этот сценарий-сохранить предыдущее состояние приложения во время завершения.

  • магазин app ваши текущие данные в JSON/plist/NSUserDefaults / архив пользовательской модели на applicationWillTerminate: метод и
  • восстановить сохраненные данные в applicationWillEnterForeground:

например - @ SignUpViewController регистрация для UIApplicationWillTerminateNotification, который будет срабатывать, когда приложение собирается завершить. Хранить информацию пользователей.

- (void)viewDidLoad
{
 [super viewDidLoad];
 [[NSNotificationCenter defaultCenter] addObserver:self
    selector:@selector(applicationWillTerminate:)
    name: UIApplicationWillTerminateNotification object:nil];
}

- (void)applicationWillTerminate:(NSNotification *)notification
{
 // store your data here
}

надеюсь, это поможет вам:)


принятый ответ правильный, однако обходной путь, похоже, не работает в текущей версии iOS (9.2) - приложение, похоже, завершается до запуска uiapplicationwillterminatenotification. Однако, слушая UIApplicationDidEnterBackgroundNotification, то же самое может быть достигнуто. e.g в Swift, поместите это в viewDidLoad ()

NSNotificationCenter.defaultCenter().addObserver(self, selector: "enteringBackground:", name: UIApplicationDidEnterBackgroundNotification, object: nil)

и имеют такую функцию:

func enteringBackground(sender:AnyObject){
    // Save application state here
}