领域写入事务失败,尽管在事务中

Realm write transaction failing, despite being in transaction

我有这段代码,它应该在 messages 后附加一个新的 message:

func addMessage(_ message: Message) {
    do {
        try Realm().write {
            self.messages.append(message)
        }
    } catch let error {
        print("could not add message due to error:\n\(error)")
    }
}

但是,我得到一个异常Cannot modify managed RLMArray outside of a write transaction这对我来说没有任何意义,因为我已经在写入事务中...

您需要在应用 write 模块之前创建一个 Realm 对象。

根据GitHub documentation,您可以尝试这样的代码:

func addMessage(_ message: Message) {
    do {
        let realm = try! Realm()
        try! realm.write {
            self.messages.append(message)
        }
    } catch let error {
        print("Could not add message due to error:\n\(error)")
    }
}

希望对您有所帮助!

问题是我使用的是没有特殊配置的普通 Realm 对象。由于我使用的是 Realm Mobile Platform,每次我想写入该数据库时,我都需要创建一个具有相同配置的 Realm 对象:

let configuration = Realm.Configuration(
                syncConfiguration: SyncConfiguration(user: user, realmURL: URL(string: "realm://127.0.0.1:9080/~/speciail")!)
            )
self.realm = try! Realm(configuration: configuration)

//now do the write transaction!

需要一些重构,但我现在有了。感谢那些花时间帮助我的人。

您可以通过设置默认配置将 let realm = try! Realm() 与自定义默认配置一起使用,请参阅 here:

  var config = Realm.Configuration()

  // Set this as the configuration used for the default Realm
  Realm.Configuration.defaultConfiguration = config