我可以在Swift中编辑没有事务的Realm对象吗?

时间:2016-05-11 09:43:28

标签: swift realm realm-cocoa

在我的项目中,我需要在Request body中发送Realm Object。在此操作之前,我需要将对象变量中的一些值替换为另一个值。

但在我从服务器获得成功响应之前,我不需要保存新值。

如果我在更改时没有打开交易,我会收到错误

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

那么,有没有办法在没有即时保存的情况下修改Realm对象,而是“节省成功”的情况?

2 个答案:

答案 0 :(得分:1)

你可以这样做:

  1. 克隆存储的领域对象:

    var editableObject:MyRealmObjectClass? .... .... .... .... editableObject = MyRealmObjectClass(value:alreadyStoredObject)

  2. 然后,您需要进行所有修改,对此克隆副本执行以下操作: editableObject.someProper = newValue

  3. 然后您在请求正文中发送此副本。在服务器成功响应后,你会向后做:

    alreadyStoredObject = MyRealmObjectClass(value:editableObject)

  4. 在此之后,您可以将更新的对象写入本地db:

    让领域=试试!领域()     尝试? realm.write {       realm.add(alreadyStoredObject,update:true)     }

  5. hasStoredObject的primaryKey不会被更改。

    离开ViewController后,

    editableObject将不会被保存,最终将被丢弃。

答案 1 :(得分:-1)

您可以使用realm.beginWrite()开始交易并进行您想要进行的更改。如果服务器调用成功,那么您可以提交事务realm.commitWrite()或者取消事务realm.cancelWrite()