AppDelegate applicationDidEnterBackground работает на симуляторе, но не на устройстве

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

 func applicationWillEnterForeground(_ application: UIApplication) {

        let username : String? = UserDefaults.standard.string(forKey: "username")
        if username != nil {
            print("online")
            let object = PFUser.current()
            object!["online"] = "yes"
            object?.saveInBackground()

        }

    }

    func applicationDidEnterBackground(_ application: UIApplication) {

        let username : String? = UserDefaults.standard.string(forKey: "username")
        if username != nil {
            print("Offline")
            let object = PFUser.current()
            object!["online"] = "no"
            object?.saveInBackground()

        }
    }

Когда я проверяю это с помощью симулятора на Mac, кажется, что он работает отлично. Однако, когда я тестирую его на своем реальном iPhone, он обновляется при открытии приложения, но не при его закрытии. (печать всегда печатается как на устройстве, так и на симуляторе, поэтому функция вызывается)

Проведя некоторое исследование, я обнаружил, что мне может понадобиться это в моем info.plist Application does not run in background, поэтому я добавил это и установил значение «нет». Однако он все еще не работает.


person user6520705    schedule 01.08.2018    source источник


Ответы (1)


Почему бы вам не использовать другой метод состояния приложения, например func applicationDidEnterBackground(_ application: UIApplication) {}

Помните, что applicationWillResignActive(:) вызывается раньше, чем applicationDidEnterBackground(:)

person Euler Tiago    schedule 01.08.2018
comment
Итак, вы предлагаете использовать applicationWillResignActive, а не applicationDidEnterBackground. - person user6520705; 01.08.2018
comment
Это будет зависеть от ваших потребностей. Этот метод на самом деле вызывается раньше, чем didenterbackground. Может быть, может решить вашу проблему. - person Euler Tiago; 03.08.2018