Приложение Swift будет завершено и сохранено в Cloudkit

Приложение SwiftWillTerminate и Cloudkit

Ищу решение. В моей игре CloudKit сохраняет состояние игры, когда приложение закрывается. При сохранении запускается несколько вызовов CloudKit для сохранения всех данных. Это делается с помощью BackgroundTask в applicationDidEnterBackground.

class GameScene: SKScene {
   var backgroundTask: UIBackgroundTaskIdentifier = .invalid
   ....


   @objc func appMovedToBackground() {
   ....
   // Call CloudKit save
   registerBackgroundTask()

      func registerBackgroundTask() {
         backgroundTask = UIApplication.shared.beginBackgroundTask { [weak self] in
            self?.endBackgroundTask()
         }
         assert(backgroundTask != .invalid)
      }

      func endBackgroundTask() {
         print("Background task ended.")
         UIApplication.shared.endBackgroundTask(backgroundTask)
         backgroundTask = .invalid
      }
   }
}

Фоновой задаче требуется около 2 секунд, чтобы сохранить ее в iCloud. Это небольшие пакеты. Прекрасно работает.

Но если пользователь дважды щелкнет HomeButton и сразу переместит приложение, проведя пальцем вверх, вызывается applicationWillTerminate.

Если я сейчас вызываю тот же код, что и в applicationDidEnterBackground, вызывается applicationWillTerminate. Затем выполняется прямой код. Но не сохраняйте данные iCloud. Почему?

есть ли решение для меня?

0 ответов

Другие вопросы по тегам