首页 > 解决方案 > 如何在 Swift 中使用 beginBackgroundTask 和 endBackgroundTask

问题描述

我正在 Swift 上开发一个 iOS 应用程序。我在模拟器上,我想在用户离开应用程序时更新他的数据。这是代码:

func applicationWillTerminate(_ application : UIApplication){
        //We update user Data
        let taskId = application.beginBackgroundTask {}
        Users.updateUsersData {
           application.endBackgroundTask(taskId)
        }
    }
static func updateUsersData(completion : @escaping () -> Void) {
        let update : [String : Any] = [
            "Users/\(userId!)/numberOfGame" : (Users.numberOfGame)!,
            "Users/\(userId!)/numberOfWin" : (Users.numberOfWin)!
        ]
        
        dbRef.updateChildValues(update){
            (error,dbRef) in
            completion()
        }
    }

只有当我从模拟器关闭应用程序时,才会调用 applicationWillTerminate 函数,但它会在 updateUserData 中的写入完成之前完成。这是正常的,因为 updateChildValues 是异步的,但我等待,不会发生写入。这可能是因为我在 applicationWillTerminate 而不是在 applicationDidEnterBackground 中进行更新,这将使操作系统有更多时间接受超时请求,但问题是 applicationDidEnterBackground 从未被调用(我不知道为什么)。

有没有人有办法解决吗?

谢谢 !

标签: iosswiftmultithreadingios-simulator

解决方案


推荐阅读