swift - 如何确保在应用程序结束时更新数据?
问题描述
目前我正在更新用户数据,而他们正在使用该应用程序。这会对数据库进行大量调用。我认为当用户离开应用程序时只执行一次更新可以提高性能。问题如下:如果这些最后的写入失败,我该怎么办?我知道有一个完成块,但我看不到如何重新开始其中的写入。这就是为什么现在我会在应用程序运行时更新数据,即使它更昂贵。如何确保用户重新登录时数据已更新?
谢谢你的时间 :)
解决方案
假设调用了用于更新用户数据的 swift 函数update_data()
。我看到您正在使用 Firebase RealTimeDatabase,因此您可能需要完成一段代码。在该完成块中,您可以添加error in
并且可以控制如果写入数据时出现错误会发生什么,并调用update_data()
直到没有更多错误为止。如果没有连接,或者错误将永远持续下去,这对设备来说可能非常昂贵。
但是,代码应该是这样的:
func update_data(){
Database.reference("path").setValue("Data you want to update", withCompletionBlock: {(error, reference) in
if error != nil{
//There was an error, try again
update_data()
}
})
}
这似乎不是一个好的做法,因为如果总是出现错误,代码可能会永远运行。但是,您可以检查 Firebase 中的错误类型并独立处理它们。但是,我注意到 FB RealTimeDatabase 会保留请求,直到设备再次连接(如果错误是网络连接),只要用户没有完全关闭应用程序(在这种情况下,我认为没有解决您的问题,因为当您完全关闭应用程序时,所有后台任务都会停止,如果写入失败,您将无法在应用程序未运行的情况下运行应用程序代码)。
最后一段都是我个人的经验。不知道有没有其他功能可以解决这个问题。但是,我希望它有所帮助:)。请检查您在不同情况下的实现(无连接的用户、连接低的用户、对数据库的访问受限的用户等)。
推荐阅读
- python - 如何计算python中多个字符串对中字符串的出现次数?
- javascript - 如何将自动递增的 id 添加到动态大小的可观察数组?
- ajax - 如何通过ajax调用使用grails withForm
- rest - 创建多功能休息端点的正确方法是什么?
- laravel - 为什么使用 Azure Active Directory 的 Outlook API 会收到未经授权的响应?
- html - 如何让引导程序占据整个屏幕
- fortran - 根据输入从子程序中读取不同的文件
- html - flex 项目在换行之前缩小到最小宽度
- ubuntu - ubuntu 20.4.1 WSL2 和 AWS ubuntu 实例上的 Wireshark
- clojure - 在clojure中使用给定步骤迭代列表