问题 从领域中分离对象?


可以说我有以下场景......

ViewController1 加载一个 Person 来自主线程上的Realm的对象并将其传递给 ViewController2。用户互动 ViewController2 导致相同的 Person 要更改的对象,但我只想在用户按下“保存”后保留更改。

目前,改变传递时 Person 对象 ViewController2 抛出运行时错误,表示需要在Write块中对对象进行更改。这是有道理的,但在这种情况下,我实际上并不想立即坚持更改。

  • 有没有办法从一个领域分离一个对象来避免这些 检查?
  • 如果没有,那么建议的工作是什么? (将对象复制到新实例?分别跟踪对对象的更改并在以后应用它们?两者看起来都很混乱。)

1748
2017-07-29 17:23


起源

也许相关 github.com/realm/realm-java/issues/1202 - Ixx
看这里: realm.io/docs/swift/latest 在“更新对象”部分中,如果您有可以使用的主键 Realm().add(_:update:)。因此,您似乎已经重新创建了对象,并且当您想要保存它时,执行写入事务并执行更新。 - Ixx
谢谢Ixx,这是我遇到的同样问题。我的对象相当大(很多字段),我不想每次都将它全部复制到一个新对象。 :( - lionpants
可以理解......我也对答案感兴趣:) - Ixx


答案:


现在,您可以通过以下方式制作对象的“独立”副本 Object(value: existingObject)  - 这可能是目前最简单的解决方案,直到Realm添加类似嵌套事务的内容 undo任意数量的更改更容易。


12
2017-07-29 18:52



这是Swift中从现有对象初始化新对象的方法吗?在OC中是否有类似的方式? - xi.lin
根据当前的测试,这会分离对象,但不会分离相关对象 - 尝试从多对多关系修改相关对象仍然显示“尝试修改写入事务之外的对象” - o15a3d4l11s2
这是目前分离领域对象的最好也是唯一简单的方法...... - virusss8