"在写入事务中无法创建异步查询"异常

juf*_*ina 6 macos realm swift3

在将我的OS X应用程序从swift 2.2迁移到swift 3.0(领域版本也从1.0.2变为2.1.1)之后,一些写入事务开始抛出异常:"在写入事务中无法创建异步查询".但它在迁移之前工作正常.

let realm = try Realm()
let allMessages = realm.objects(Message.self)
let messages = allMessages.filter("(state == 1) AND (dateSent <= %@)",  dateSent)
try realm.write ({
   messages.forEach { message in message.state = .seen }
})
Run Code Online (Sandbox Code Playgroud)

在事务开始时它会抛出异常.为什么会发生这种情况,我该如何解决?

Dio*_*o T 0

看来你正在变异messagesforEach这可能是崩溃的原因。

尝试这样的事情:

let realm = try Realm()
let allMessages = realm.objects(Message.self)
let results = allMessages.filter("(state == 1) AND (dateSent <= %@)",  dateSent)
let messages = Array(results)
try realm.write ({
   messages.forEach { message in message.state = .seen }
})
Run Code Online (Sandbox Code Playgroud)

也许这不是最好的解决方案,因为您会将所有消息加载到内存中,但应该可以工作。