Представьте себе следующий сценарий с использованием платформы Parse на iOS:
- Я получаю
PFObject
с сервера, назовем его GlassChalice. - Кто-то еще скажем, Билл Блофельд, меняет GlassChalice из другого места.
- Позже я внесу некоторые изменения в свой локальный GlassChalice, но не сохраню их на сервере.
- Еще позже я Я хочу обновить GlassChalice, но я хочу обновить его до текущих значений сервера , другими словами, значений Билла Блофельда. Я не хочу заменить значения сервера моими локальными значениями, а также не хочу сбросить мои локальные значения на значения, загруженные GlassChalice.
Так что, если я использую revert()
, получу ли я то, что хочу?
В соответствии с документами Parse:
- revert
Удаляет любые изменения этого объекта, сделанные со времени последнего вызова для сохранения, и устанавливает его обратно в состояние сервера.
... но, как в моем примере, очистка «изменений, внесенных после последнего вызова для сохранения» и установка его «обратно в состояние сервера» не всегда одно и то же.
Пока это кажется единственным способом гарантировать желаемые результаты, но у него есть одна очевидная проблема:
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?()
})
}
Но огромная проблема заключается в том, что Я должен знать все имена ключей и введите их явно, чтобы это работало.
Есть ли лучший, более обобщенный c способ?