所以想象以下场景,在 iOS 上使用 Parse 平台:
- 我
PFObject从服务器得到一个,我们称之为 GlassChalice。 - 比方说比尔·布洛菲尔德(Bill Blofeld)的其他人从不同的位置更改了 GlassChalice。
- 后来,我对本地 GlassChalice 进行了一些更改,但不将它们保存到服务器。
- 再后来,我想更新 GlassChalice,但我想将它更新为当前的服务器值,即 Bill Blofeld 的值。我不想用我的本地值替换服务器值,也不想将我的本地值重置为 GlassChalice 加载的值。
所以如果我使用revert(),我会得到我想要的吗?
根据解析文档:
- revert清除自上次调用 save 以来对此对象所做的任何更改,并将其设置回服务器状态。
...但是,就像在我的示例中一样,清除“自上次调用保存以来所做的更改”并将其设置为“恢复到服务器状态”并不总是一回事。
到目前为止,这似乎是保证我想要的结果的唯一方法,但它有一个明显的问题:
public func updateObjectFromServer(_ objectToUpdate: PFObject, then doThis: (()->Void)? = nil) {
let query = PFObject.query()
query?.whereKey("objectId", equalTo: objectToUpdate.objectId!)
query?.getFirstObjectInBackground (block: {
(serverObject, error) in
if error.isNil() {
objectToUpdate["numberOfLimbs"] = serverObject?["numberOfLimbs"]
objectToUpdate["eyePlacement"] = serverObject?["eyePlacement"]
objectToUpdate["crossStitchingTalentRating"] = serverObject?["crossStitchingTalentRating"]
objectToUpdate["clamsEaten"] = serverObject?["clamsEaten"]
} else {
//handle error...
}
doThis?()
})
}
但是这里最大的问题是我必须知道所有的键名,并明确地输入它们,这样才能工作。
有没有更好、更通用的方法?