Могу ли я редактировать объект Realm без транзакции в Swift?

В моем проекте мне нужно отправить Realm Object в теле запроса. Перед этой операцией мне нужно заменить некоторые значения в переменных объекта другими.

Но мне не нужно сохранять новые значения, прежде чем я получу ответ от сервера.

В случае, если я не открыл транзакцию при изменении, я получаю ошибку

'Attempting to modify object outside of a write transaction - call beginWriteTransaction on an RLMRealm instance first.'

Итак, есть ли способ изменить объект Realm без мгновенного сохранения, а в случае "экономия на успехе"?

2 ответа

Вы можете сделать это следующим образом:

  1. клонировать сохраненный объект области:

    var editableObject: MyRealmObjectClass?................ editableObject = MyRealmObjectClass (значение: уже StoredObject)

  2. Затем все изменения, которые вам нужны, выполняются над этой клонированной копией: editableObject.someProper = newValue

  3. Затем вы отправляете эту копию в тело запроса. И после успешного ответа от сервера, вы делаете задом наперед:

    readyStoredObject = MyRealmObjectClass(значение: editableObject)

  4. И после этого вы можете записать обновленный объект в локальную базу данных:

    пусть царство = попробуй! Realm() попробовать? realm.write { realm.add(readyStoredObject, update: true)}

primaryKey для fromStoredObject не будет изменен.

editableObject не будет сохранен и в конечном итоге будет удален после того, как вы покинете свой ViewController.

Вы можете начать транзакцию, используя realm.beginWrite() и внесите изменения, которые вы хотите сделать. Если серверный вызов успешен, вы можете зафиксировать транзакцию realm.commitWrite() или отмените транзакцию realm.cancelWrite(),

Другие вопросы по тегам