如果 timeout/network 问题,解析平台在线模式和离线回退

Parse Platform Online mode and fallback for offline if timeout/network issue

如果没有连接,Parse Platform 中是否有回退到本地数据存储的方法?

我知道有 pin/pinInBackground,所以我可以将任何对象固定到 LocalDataStore。

然后我可以查询本地数据存储以获取该信息。

但是,我总是想先尝试获取服务器数据,如果失败,再获取本地数据。

有没有办法自动执行此操作?

(或者我必须在本地固定所有内容,然后远程查询,如果失败,则在本地查询)

好问题。

Parse 有缓存查询的概念。 https://docs.parseplatform.org/ios/guide/#caching-queries

缓存查询的有趣特性是您可以指定 - "if no network"。但是,这仅在您之前缓存了查询结果时才有效。我还发现丢失网络连接和缓存查询之间的延迟识别其丢失的网络使整个功能有点垃圾。

我解决这个问题的方法是结合使用 AlamoFire 库和固定对象。我选择使用 AlamoFire 库的原因是因为它得到了非常好的支持,并且它可以立即发现网络连接下降。我只有几百条记录,所以我不担心固定对象,而且性能似乎不会受到影响。所以我的工作方式是....

在 class

的顶部定义一些 class 对象
// Network management
private var reachability: NetworkReachabilityManager!
private var hasInternet: Bool = false

在视图唤醒时调用方法

// View lifecycle
override func awakeFromNib() {
        super.awakeFromNib()
        self.monitorReachability()
    }

当网络可用性发生变化时更新对象。我知道这个方法可以改进。

private func monitorReachability() {
        NetworkReachabilityManager.default?.startListening { status in
            if "\(status)" == "notReachable" {
                self.hasInternet = false
            } else {
                self.hasInternet = true
            }
            print("hasInternet = \(self.hasInternet)")
        }
    }

然后当我调用查询时,我在设置查询对象时有一个开关。

// Start setup of query
let query = PFQuery(className: "mySecretClass")

if self.hasInternet == false {
    query.fromLocalDatastore()
    }
// Complete rest of query configuration

当然,我从服务器 return 固定了所有结果。