Могу ли я редактировать объект Realm без транзакции в Swift?
В моем проекте мне нужно отправить Realm Object в теле запроса. Перед этой операцией мне нужно заменить некоторые значения в переменных объекта другими.
Но мне не нужно сохранять новые значения, прежде чем я получу ответ от сервера.
В случае, если я не открыл транзакцию при изменении, я получаю ошибку
'Attempting to modify object outside of a write transaction - call beginWriteTransaction on an RLMRealm instance first.'
Итак, есть ли способ изменить объект Realm без мгновенного сохранения, а в случае "экономия на успехе"?
2 ответа
Вы можете сделать это следующим образом:
клонировать сохраненный объект области:
var editableObject: MyRealmObjectClass?................ editableObject = MyRealmObjectClass (значение: уже StoredObject)
Затем все изменения, которые вам нужны, выполняются над этой клонированной копией: editableObject.someProper = newValue
Затем вы отправляете эту копию в тело запроса. И после успешного ответа от сервера, вы делаете задом наперед:
readyStoredObject = MyRealmObjectClass(значение: editableObject)
И после этого вы можете записать обновленный объект в локальную базу данных:
пусть царство = попробуй! Realm() попробовать? realm.write { realm.add(readyStoredObject, update: true)}
primaryKey для fromStoredObject не будет изменен.
editableObject не будет сохранен и в конечном итоге будет удален после того, как вы покинете свой ViewController.
Вы можете начать транзакцию, используя realm.beginWrite()
и внесите изменения, которые вы хотите сделать. Если серверный вызов успешен, вы можете зафиксировать транзакцию realm.commitWrite()
или отмените транзакцию realm.cancelWrite()
,