请帮助添加/更新Real对象 我喜欢存储和更新User类。 用户类由Client类组成, 客户端类包含Avatar属性和Rooms List。 问题是我面临错误"领域已经处于写入事务中#34;因为我的客户端类头像属性和房间列表被同时提取并推送到Realm的不同闭包中。
func fetchRooms() {
roomsDelegate?.contactRooms(entityID: entityID,
success: {rooms in
self.addRooms(rooms: rooms)
},
fail: { error in
print (error)
})
}
func addRooms(rooms: [VMRoom]?) {
if let r = rooms {
do{
try realm?.write {
realm?.add(r, update: true)
self.rooms.append(objectsIn: r)
} }
catch let e {
print(e.localizedDescription)
}
}
}
func getAvatarURL() {
do{
try realm?.write {
avatarURL = avatarDelegate?.contactAvatarURL(eExtention: eExtention)
} }
catch let e {
print(e.localizedDescription)
}
}
答案 0 :(得分:0)
就像Realm所说,如果你试图在一个线程中打开两个写入事务,你的应用程序逻辑就会出错。我建议您检查一下您的逻辑,看看是否可以使其更加简化。
但无论如何,要修复当前代码,缓解此问题的一种方法是在设置头像URL时检查您是否已经处于写入事务中。
func getAvatarURL() {
let inWriteTransaction = realm?.isInWriteTransaction
do {
if !inWriteTransaction {
realm?.beginWrite()
}
avatarURL = avatarDelegate?.contactAvatarURL(eExtention: eExtention)
if !inWriteTransaction {
try realm.commitWrite()
}
catch let e {
print(e.localizedDescription)
}
}