从后台线程修改Realm对象无法立即在主线程上更新 我的代码是这样的:
class demo: NSObject {
var mail: OutMailModel?
func demotest() {
let realm = try! Realm()
let mailID = 10001
self.mail = realm.object(ofType: OutMailModel.self,forPrimaryKey: mailID)
DispatchQueue.global().async {
let realm = try! Realm()
if let myMail = realm.object(ofType: OutMailModel.self,forPrimaryKey: mailID) {
try! realm.write {
myMail.message = "xxxx"
}
}
DispatchQueue.main.async {
NSLog("mail.message:\(self.mail?.message)") // message not change
}
}
}
}
事件不起作用:
DispatchQueue.main.async {
let realm = try! Realm()
if let myMail = realm.object(ofType: OutMailModel.self,forPrimaryKey: mailID) {
NSLog("mail.message:\(myMail.message)") // message not changed
}
}
代码有什么问题?有人帮忙吗?
答案 0 :(得分:2)
从后台线程更新领域时,更改可能不可见,因为领域未使用新信息进行更新。来自docs:
在主UI线程(或任何带有runloop的线程)对象上 自动更新每个之间的其他线程的更改 runloop的迭代。在任何其他时间,你将在工作 快照,因此单个方法总是看到一致的视图,从不 不得不担心其他线程会发生什么。
您可以致电realm.refresh()
强制刷新领域:
func demotest() {
...
DispatchQueue.global().async {
let realm = try! Realm()
if let myMail = realm.object(ofType: OutMailModel.self,forPrimaryKey: mailID) {
try! realm.write {
myMail.message = "xxxx"
}
}
realm.refresh();
DispatchQueue.main.async {
NSLog("mail.message:\(self.mail?.message)") // message not change
}
}
}