swift - 我可以在 Swift 中不使用事务来编辑 Realm 对象吗?

标签 swift realm realm-cocoa

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

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

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

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

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

最佳答案

你可以这样做:

  1. 克隆您存储的 Realm 对象:

    var editableObject: MyRealmObjectClass?

    editableObject = MyRealmObjectClass(value: alreadyStoredObject)
    
  2. 然后,您需要对这个克隆副本进行所有修改:

editableObject.someProper = newValue

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

    alreadyStoredObject = MyRealmObjectClass(value: editableObject)

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

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

alreadyStoredObject 的主键不会改变。

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

关于swift - 我可以在 Swift 中不使用事务来编辑 Realm 对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37158769/

相关文章:

ios - 在实时输入字符时,如何获取 UITextfield 的值?

ios - 对象未在 TableView 中使用新的 Realm 数据进行更新

ios - 您如何进行初始迁移以从非 Realm 持久层迁移?

ios - linkingObjectsProperties 从 swift 2.0 覆盖

swift - 如何从collectionView中的第二项开始?

ios - collectionView cellForItemAt 没有被调用

ios - 如何将适用于 iOS 的 AWS 开发工具包与 Objective-C 而不是 Swift 一起使用?

android - Realm 数据同步不一致

快速比较realm.io,无需提前获取它