Parse Platform на iOS: лучший способ заменить измененные локальные значения на недавно измененные значения сервера? - PullRequest
0 голосов
/ 08 апреля 2020

Представьте себе следующий сценарий с использованием платформы Parse на iOS:

  1. Я получаю PFObject с сервера, назовем его GlassChalice.
  2. Кто-то еще скажем, Билл Блофельд, меняет GlassChalice из другого места.
  3. Позже я внесу некоторые изменения в свой локальный GlassChalice, но не сохраню их на сервере.
  4. Еще позже я Я хочу обновить 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 способ?

...