ios - 如何在 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 从未被调用(我不知道为什么)。
有没有人有办法解决吗?
谢谢 !
解决方案
推荐阅读
- azure - Azure 搜索 - 正则表达式搜索
- shell - 两个版本节点 nmp 的问题
- node.js - Node.js REST API 部署到 Heroku,package.json “文件”没有被部署
- c++ - 当客户端在 write() 期间终止连接时,由对等套接字错误重置连接
- python - 累积密度函数对某些分位数的最小二乘拟合
- javascript - 使用 Ext JS 7.2 在按钮单击时触发 Android 键盘
- angular - 运行第二个 Observable is first Observable is false
- graphics - 如何在 godot 中创建动画 3D 昼夜循环?
- javascript - context.drawImage() 即使在 .onLoad 之后也无法在移动设备上工作(TypeError:null 不是对象)
- swift - 生成的 MTLTexture 比 CGImage 轻