2016-10-02 10 views
0

Мне нужно написать код для моего приложения (в Swift), который должен быть выполнен до завершения приложения. Он работает, когда я использую appWillTerminate в appDelegate, когда он не находится в фоновом режиме, но мне нужно его для запуска кода, когда он заканчивается как на заднем плане, так и на переднем плане. Как мне это сделать ??завершение приложения в фоновом режиме swift

+0

Какой код необходимо выполнить? Если вы просто пытаетесь сохранить данные, это может быть выполнено другими способами. –

+0

appWillTerminate: он не вызывается, если приложение находится в фоновом режиме, и нет способа его вызова. Я бы предложил написать код в applicationDidEnterBackground: так как после этого нет способа вызвать appWillTerminate. Но опять же, это зависит от того, что вы пытаетесь достичь. Если речь идет о сохранении данных, чем приложению applicationDidEnterBackground. – Netra

ответ

0

Следующая стратегия может работать, и это более чистый подход к языку Swift, чем iOS: каждый класс может переопределить метод deinit. Всякий раз, когда класс должен быть освобожден из кучи, вызывается de-initializer до освобождения класса. Это может произойти, например, когда класс выпадает из сферы действия и больше не учитывается. Это, вероятно, произойдет для вашего AppDelegate, когда ваше приложение завершает работу.

0

Вы можете поместить свой код в этот метод beginBackgroundTaskWithName:expirationHandler: в applicationDidEnterBackground. Этот метод дает вашему приложению дополнительное время для завершения какой-либо задачи, что вам нужно для завершения. Больше Документации здесь Выполнение конечной длины Задачи:https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

0

Если приложение в фоновом режиме и не имеют какой-либо задачи, совершающие, то приложение в приостановке. Когда приложение приостановлено, приложение завершения не будет вызывать applicationWillTerminate. Но вы можете начать фоновое задание или включить фоновый режим. , например.

func applicationDidEnterBackground(_ application: UIApplication) { 

     bgTask = application.beginBackgroundTask(withName: "MyTask") { 
      application.endBackgroundTask(self.bgTask!) 
      self.bgTask = UIBackgroundTaskInvalid 
     } 

}