そこで、iOS で Parse プラットフォームを使用する次のシナリオを想像してください。
- サーバーからを取得し
PFObjectます。これを GlassChalice と呼びましょう。 - 他の誰か、たとえば Bill Blofeld が別の場所から GlassChalice を変更します。
- その後、ローカルの GlassChalice に変更を加えましたが、サーバーには保存しませんでした。
- さらに後で、GlassChalice を更新したいのですが、それを現在のサーバーの値、つまり Bill Blofeld の値に更新したいと考えています。サーバーの値をローカルの値に置き換えたくありません。また、ローカルの値を GlassChalice がロードされた値にリセットしたくありません。
を使用するrevert()と、必要なものが得られますか?
解析ドキュメントによると:
- revertsave の最後の呼び出し以降に行われたこのオブジェクトへの変更をすべてクリアし、サーバーの状態に戻します。
...しかし、私の例のように、「保存の最後の呼び出し以降に行われた変更」をクリアすることと、「サーバーの状態に戻す」ことは常に同じではありません。
これまでのところ、これが私が望む結果を保証する唯一の方法のように思えますが、明らかな問題が 1 つあります。
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?()
})
}
しかし、ここでの大きな問題は、これを機能させるには、すべてのキー名を知っていて、それらを明示的に入力する必要があることです。
より良い、より一般的な方法はありますか?