首页 > 解决方案 > 如何确保在应用程序结束时更新数据?

问题描述

目前我正在更新用户数据,而他们正在使用该应用程序。这会对数据库进行大量调用。我认为当用户离开应用程序时只执行一次更新可以提高性能。问题如下:如果这些最后的写入失败,我该怎么办?我知道有一个完成块,但我看不到如何重新开始其中的写入。这就是为什么现在我会在应用程序运行时更新数据,即使它更昂贵。如何确保用户重新登录时数据已更新?

谢谢你的时间 :)

标签: swiftfirebase-realtime-databaseoptimizationupdating

解决方案


假设调用了用于更新用户数据的 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 会保留请求,直到设备再次连接(如果错误是网络连接),只要用户没有完全关闭应用程序(在这种情况下,我认为没有解决您的问题,因为当您完全关闭应用程序时,所有后台任务都会停止,如果写入失败,您将无法在应用程序未运行的情况下运行应用程序代码)。

最后一段都是我个人的经验。不知道有没有其他功能可以解决这个问题。但是,我希望它有所帮助:)。请检查您在不同情况下的实现(无连接的用户、连接低的用户、对数据库的访问受限的用户等)。


推荐阅读