在不影响存储对象的情况下更改值 - Realm swift

时间:2016-06-06 11:21:16

标签: ios swift realm

我正在使用领域来保存我的数据。我的问题是我希望在对象中进行一些小的临时更改,我不希望这些更改反映在我的存储对象中,但是realm不允许我在没有写入块的情况下更改检索到的对象的属性,最终导致保存我在数据库中的临时更改。 我不能通过创建新对象和分配值来创建对象的副本,因为我有大数据集。

有没有简单的解决方案来实现这一目标?

1 个答案:

答案 0 :(得分:8)

不幸的是,正如您已经说过的那样,一旦将领域Object写入Realm文件,就无法暂时将新值应用于Realm属性。这是Realm实现的既定事实,并没有正式的解决方法。因此,有必要提出一种不同的机制来将这些临时值存储在其他地方,并在时机成熟时将它们写入Realm。

您可以考虑使用Realm的ignored properties功能。从本质上讲,您可以在Realm Object中标记某些属性,以明确地不写入Realm文件,并且您可以随时(以及在任何线程上)随意修改它们。

class TestObject: Object {
  dynamic var tmpValue = ""
  dynamic var actualValue = ""

  override static func ignoredProperties() -> [String] {
    return ["tmpValue"]
  }
}

如果每次生成的临时数据类型始终是相同的类型,您可以在模型对象中创建特殊的忽略属性以保留每个属性,然后当您想要将它们实际保存在Realm中时,只需将忽略属性中的值复制到写入事务中的Realm属性。

当然,这些被忽略的值仅在添加它们的领域Object的实例中持续存在。因此,如果您的体系结构意味着您正在处理指向磁盘上相同数据源的多个Realm Object实例,则最好将这些临时值与Realm Object完全分离并挂起在其他地方的记忆中。

最后,虽然你已经说过你不想因为它们的大小而不能创建Realm对象的非持久化副本,但是有些人已经创建了一些非常酷的方法来执行这样一个没有太多代码的副本(我最喜欢的例子)在Realm-JSON project)中,仍然值得考虑。祝你好运!