AppDelegate applicationDidEnterBackground在模拟器上运行,但不在Device上运行

时间:2018-08-01 20:04:05

标签: ios swift appdelegate parse-server

我试图跟踪用户何时在线或离线。我试图通过在打开应用程序以及使用以下代码关闭应用程序时更新解析服务器中的用户对象来执行此操作。

 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中使用它,因此我将其添加并将其设置为no。但是,它仍然无法正常工作。

1 个答案:

答案 0 :(得分:0)

为什么不使用其他应用程序状态方法,例如 func applicationDidEnterBackground(_ application:UIApplication){}

请记住,在applicationDidEnterBackground(:)

之前先调用applicationWillResignActive(:)