自6个月以来,我正在使用Parse.com与我的iOS应用程序(用Swift编写),我想使用,原因有很多:
为了做到这一点,我想编写一个全局函数,为我从应用程序执行的所有查询处理这些场景。
对于函数应该做什么,我已经有了一个具体的想法,但我不知道如何从技术上编写这个函数:)
设想方案:
1. Get data from Network
2. Save date inside « lastUpdateLocalDatastore » variable in NSUserDefaults
3. Pin data in Local Datastore
4. Display data from Local Datastore —> RETURN & update TableView
1. Display data from Local Datastore —> RETURN & update TableView
2. Get data from Network (where « lastUpdateDate » in Parse is newer than « lastUpdateLocalDatastore » from NSUserDefault)
3. Pin data in Local Datastore
4. Display updated data from Local Datastore —> RETURN & update TableView
1. Get data from Network (where « lastUpdateDate » in Parse is newer than « lastUpdateLocalDatastore » from NSUserDefault)
2. Pin data in Local Datastore
3. Display updated data from Local Datastore —> RETURN & update TableView
1. Unpin all data in Local Datastore
2. Clear « lastUpdate » values in NSUserDefault
功能结构:
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
}
}问题:
发布于 2015-08-20 09:50:30
最后,我找到了一种基于以下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)
}
})
})
}TO DO :我需要添加"lastUpdateDate“选项,以便只从网络中获取修改过的数据。
https://stackoverflow.com/questions/31742400
复制相似问题