Mat*_*nsc 2 ios parse-platform swift local-datastore
自 6 个月以来,我将 Parse.com 与我的 iOS 应用程序(用 Swift 编写)一起使用,出于多种原因,我想使用 Parse 本地数据存储:
为了做到这一点,我想编写一个全局函数来处理我在应用程序中执行的所有查询的这些场景。
我已经对函数应该做什么有了一个具体的想法,但我不知道如何在技术上编写这个函数:)
注册/登录(链接多个查询):
加载应用程序(链式多个查询):
触发更新(简单查询):
登出 :
IF ( "First login" -> Local Datastore is empty ) {
Get data from Network
Pin data in Local Datastore
Save « lastUpdateLocalDatastore » in NSUSerDefaults
—> RETURN data in Cache
} ELSE {
IF ( "Launching application" -> Cache is empty ) {
Get data from Local Datastore
—> RETURN data in Cache
} ELSE IF ( "trigger update" ) {
Get data from Network
Pin new data in Local Datastore
Save « lastUpdateLocalDatastore » in NSUSerDefaults
—> RETURN data in Cache
}
}
Run Code Online (Sandbox Code Playgroud)
最后我找到了一种基于这个 GitHub 主题的方法:https : //github.com/ParsePlatform/ParseUI-iOS/issues/53
这是我使用的功能:
func 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)
}
})
})
}
Run Code Online (Sandbox Code Playgroud)
TO DO:我需要添加“lastUpdateDate”选项以仅从网络中获取修改过的数据。
| 归档时间: |
|
| 查看次数: |
1477 次 |
| 最近记录: |