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

67
7

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

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

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

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

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

спросил(а) 2016-05-11T12:43:00+03:00 4 года, 2 месяца назад
1
Решение
104

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

клонировать объект сохраненного объекта:

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

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

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

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

И после этого вы можете записать обновленный объект в локальный db:

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

primaryKey of alreadyStoredObject не будет изменен.

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

ответил(а) 2018-05-05T12:20:00+03:00 2 года, 2 месяца назад
-4

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

ответил(а) 2016-05-11T12:47:00+03:00 4 года, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема