Parse Local Datastore + Network Sync
自6个月起,我就在我的iOS应用程序(使用Swift编写)中使用Parse.com,出于多种原因,我想使用Parse Local Datastore:
- 使我的应用程序可以离线使用(可检索)
- 减少数据使用量(许多查询返回"未更新数据")
- 减少加载时间(主要是在启动应用程序并从网络加载所有数据时)
为此,我想编写一个全局函数来处理这些情况,以解决我在应用程序中所做的所有查询。
我已经对该函数应该执行的操作有一个明确的了解,但我不知道该如何从技术上编写此函数:)
场景:
-
注册/登录(链接多个查询):
- 从网络获取数据
- 是否在" lastUpdateLocalDatastore"中保存日期? NSUserDefaults中的变量
- 在本地数据存储区中固定数据
-
显示本地数据存储中的数据->返回
最后,我基于此GitHub主题找到了一种方法:
https://github.com/ParsePlatform/ParseUI-iOS/issues/53这是我使用的功能:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34func findObjectsLocallyThenRemotely(query: PFQuery!, block:[AnyObject]! -> Void) {
let localQuery = (query.copy() as! PFQuery).fromLocalDatastore()
localQuery.findObjectsInBackgroundWithBlock({ (locals, error) -> Void in
if (error == nil) {
println("Success : Local Query", msg:"\\(query.parseClassName)")
block(locals)
} else {
println("Error : Local Query", msg:"\\(query.parseClassName)", error: error)
}
query.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in
if(error == nil) {
println("Success : Network Query", msg:"\\(query.parseClassName)")
PFObject.unpinAllInBackground(locals, block: { (success, error) -> Void in
if (error == nil) {
println("Success : Unpin Local Query", msg:"\\(query.parseClassName)")
block(objects)
PFObject.pinAllInBackground(objects, block: { (success, error) -> Void in
if (error == nil) {
println("Success : Pin Query Result", msg:"\\(query.parseClassName)")
} else {
println("Error : Pin Query Result", msg:"\\(query.parseClassName)", error: error)
}
})
} else {
println("Error : Unpin Local Query", msg:"\\(query.parseClassName)", error: error)
}
})
} else {
println("Error : Network Query", msg:"\\(query.parseClassName)", error: error)
}
})
})
}要做的事情:我需要添加" lastUpdateDate "选项以仅从网络中获取修改后的数据。