В iOS 13 когда сохранять данные? - PullRequest
1 голос
/ 26 октября 2019

Поддержка сцен и несколько окон в iOS 13 усложнили вопрос о том, когда сохранять данные. sceneDidEnterBackground делегата сцены может показаться довольно хорошим местом, но бывают случаи, когда этого будет недостаточно:

  • Если ваша сцена была впереди, и пользователь переходит в приложениеПереключатель и завершает работу вашего приложения, вы получите sceneDidDisconnect и applicationWillTerminate, а не sceneDidEnterBackground.

  • Если пользователь выключит устройство, когда ваше приложение находится на переднем крае, вы 'Вы получите applicationWillTerminate, а не sceneDidEnterBackground.

Какую стратегию используют люди для управления сохранением данных в приложениях iOS 13, которые поддерживают оконные сцены и, возможно, несколько окон?

1 Ответ

1 голос
/ 26 октября 2019

Из документов на UISceneDelegate.sceneWillResignActive(_:):

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

Они также указываются в документах для UISceneDelegate.sceneDidDisconnect(_:):

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

Поэтому похоже, что Apple рекомендует сохранять пользовательские данные по мере возникновения событий, напримерв ответ на действия пользователя (отказ от контроллера представления, переключение переключателя, ввод текста в текстовое поле и т. д.), но мы можем использовать sceneWillResignActive(_:) и / или sceneDidDisconnect(_:) для сохранения некоторых данных, если нам это нужно или нужнок.

...