Parse platform 分析平台在线模式,并在超时/网络问题时回退离线

Parse platform 分析平台在线模式,并在超时/网络问题时回退离线,parse-platform,offline,Parse Platform,Offline,如果没有连接,在解析平台中是否有方法回退到本地数据存储 我知道有pin/pinInBackground,所以我可以将任何对象固定到LocalDataStore 然后我可以查询localdatastore以获取该信息 但是,我希望始终尝试首先获取服务器数据,如果失败,则获取本地数据 有没有一种方法可以自动做到这一点 (或者我必须在本地锁定所有内容,然后查询远程,如果失败,则在本地查询)好问题 Parse具有缓存查询的概念 缓存查询的有趣特性是,您可以指定“如果没有网络”。但是,这仅在以前缓存过查询

如果没有连接,在解析平台中是否有方法回退到本地数据存储

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

然后我可以查询localdatastore以获取该信息

但是,我希望始终尝试首先获取服务器数据,如果失败,则获取本地数据

有没有一种方法可以自动做到这一点

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

好问题

Parse具有缓存查询的概念

缓存查询的有趣特性是,您可以指定“如果没有网络”。但是,这仅在以前缓存过查询结果的情况下有效。我还发现,丢失网络连接和缓存查询识别其丢失的网络之间的延迟使得整个功能有点垃圾

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

在类的顶部定义一些类对象

// 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

当然,我会锁定从服务器返回的所有结果。

@daniel benedykt-这对你有帮助吗?