Realm写入事务失败,尽管处于事务中

时间:2017-07-06 02:23:15

标签: swift realm realm-mobile-platform

我有这段代码,应该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这对我没有任何意义,因为我已经在写一个事务处理......

3 个答案:

答案 0 :(得分:2)

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

根据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)")
    }
}

希望它有所帮助!

答案 1 :(得分:1)

问题是我使用的是普通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!

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

答案 2 :(得分:1)

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

  var config = Realm.Configuration()

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