我可以在不使用Swift的情况下编辑Realm对象吗?

Tra*_*Pam 5 realm swift realm-cocoa

在我的项目中,我需要在Request主体中发送Realm Object。在执行此操作之前,我需要用另一个替换对象变量中的某些值。

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

如果我在更改时未打开交易记录,则会收到错误消息

'Attempting to modify object outside of a write transaction - call beginWriteTransaction on an RLMRealm instance first.'
Run Code Online (Sandbox Code Playgroud)

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

小智 6

你可以这样做:

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

    var editableObject: MyRealmObjectClass?

    editableObject = MyRealmObjectClass(value: alreadyStoredObject)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 然后,您需要对此克隆副本进行所有修改:

editableObject.someProper = newValue

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

    hasStoredObject = MyRealmObjectClass(值:editableObject)

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

let realm = try! Realm()
    try? realm.write {
      realm.add(alreadyStoredObject, update: true)
    }
Run Code Online (Sandbox Code Playgroud)

hasStoredObject 的primaryKey 不会改变。

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


2an*_*3th -1

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