5

在我的项目中,我需要在请求正文中发送领域对象。在此操作之前,我需要将对象变量中的一些值替换为另一个值。

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

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

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

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

4

2 回答 2

5

你可以这样做:

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

    var editableObject: MyRealmObjectClass?

    editableObject = MyRealmObjectClass(value: alreadyStoredObject)
    
  2. 然后,你需要的所有修改,你都在这个克隆的副本上做:

editableObject.someProper = newValue

  1. 然后你在请求正文中发送这个副本。在服务器成功响应后,您向后执行:

    alreadyStoredObject = MyRealmObjectClass(值:editableObject)

  2. 在此之后,您可以将更新的对象写入本地数据库:

let realm = try! Realm()
    try? realm.write {
      realm.add(alreadyStoredObject, update: true)
    }

alreadyStoredObject 的 primaryKey 不会改变。

在您离开 ViewController 后,editableObject 将不会被保存并最终被丢弃。

于 2018-05-05T09:20:44.170 回答
-1

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

于 2016-05-11T09:47:22.900 回答