2015-07-29 6 views
11

Допустим, у меня есть следующий сценарий ...Отделить объект от царства?

ViewController1 загружает Person объект из Realm на основной поток и передает его ViewController2. Взаимодействие с пользователем в ViewController2 вызывает изменение одного и того же объекта Person, но я хочу только сохранить изменения после нажатия на кнопку «Сохранить».

В настоящее время при изменении пройденного объекта Person в ViewController2 возникает ошибка выполнения, указывающая, что изменения в объекте должны выполняться в блоке записи. Это имеет смысл, но в этом сценарии я фактически не хочу постоянно сохранять изменения.

  • Есть ли способ отделить объект от царства, чтобы избежать этих ошибок ?
  • Если нет, то какой будет предлагаемая работа? (Копирование объекта в новый экземпляр? Отслеживание изменений в объект отдельно и применяя их позже? И, кажется, довольно грязный.)
+0

Возможно, связанный https://github.com/realm/realm-java/issues/1202 – Ixx

+0

Посмотрите здесь: https://realm.io/docs/swift/latest/ в разделе «Обновление объектов», если у вас есть первичный ключ, вы можете использовать 'Realm(). add (_: update:)'. Таким образом, кажется, что вы заново создали объект, и когда вы хотите его сохранить, выполните транзакцию записи и выполните обновление. – Ixx

+0

Спасибо, Ixx, это та самая проблема, которую я испытываю. Мой объект довольно большой (много полей), и я не хочу, чтобы каждый раз копировать его на новый объект. :( – lionpants

ответ

11

Прямо сейчас, вы можете сделать «автономный» копию объекта, с помощью Object(value: existingObject) - вероятно, это будет самое простое решение, пока Realm не добавит что-то вроде вложенных транзакций, что упростит произвольное количество изменений undo.

+0

Является ли это способом в Swift для запуска нового объекта из существующего? Есть ли аналогичный способ в OC? –

+2

Основываясь на текущих тестах, это отделяет объект, но не отделяет связанные объекты. При попытке изменить связанный объект из отношения to-many все еще отображается «Попытка изменить объект за пределами транзакции записи» – o15a3d4l11s2

+0

Это в настоящее время лучший и простой способ отделить объекты объектов ... – virusss8

Смежные вопросы