Swift3 不同线程中的RealmSwift更新对象(闭包)
请帮助添加/更新真实对象 我想存储和更新用户类。 用户类由客户端类组成, 客户端类由虚拟角色属性和房间列表组成。 问题是,我面临的错误是“领域已经在写事务中”,因为我的客户端类avatar属性和房间列表在同一时间以不同的闭包获取并推送到领域Swift3 不同线程中的RealmSwift更新对象(闭包),swift3,realm,Swift3,Realm,请帮助添加/更新真实对象 我想存储和更新用户类。 用户类由客户端类组成, 客户端类由虚拟角色属性和房间列表组成。 问题是,我面临的错误是“领域已经在写事务中”,因为我的客户端类avatar属性和房间列表在同一时间以不同的闭包获取并推送到领域 func fetchRooms() { roomsDelegate?.contactRooms(entityID: entityID, success: {rooms in
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)
}
}
就像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)
}
}