0

所以想象以下场景,在 iOS 上使用 Parse 平台:

  1. PFObject从服务器得到一个,我们称之为 GlassChalice。
  2. 比方说比尔·布洛菲尔德(Bill Blofeld)的其他人从不同的位置更改了 GlassChalice。
  3. 后来,我对本地 GlassChalice 进行了一些更改,但不将它们保存到服务器。
  4. 再后来,我想更新 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?()
    })
}

但是这里最大的问题是我必须知道所有的键名,并明确地输入它们,这样才能工作。

有没有更好、更通用的方法?

4

0 回答 0