使用FirestoreDecoder解码Firestore文档时,UI会冻结



我从Firestore获取数据,映射文档并使用FirestoreDecoder对每个文档进行解码。但是,对文档进行解码会暂时冻结UI。在后台线程上运行代码没有什么区别。如何防止UI在解码过程中冻结?

let collection = Firestore.firestore().collection("roll_groups")

collection.addSnapshotListener { (snapshot, error) in
if let error = error {
print("Error fetching roll groups: (error.localizedDescription)")
} else if let snapshot = snapshot {
DispatchQueue.global(qos: .background).async {
let rollGroups = snapshot.documents.map { doc -> RollGroup? in
do {
let rollGroup = try FirestoreDecoder().decode(RollGroup.self, from: doc.data())
return rollGroup
} catch {
print("Error decoding roll groups: (error)")
return nil
}
}

DispatchQueue.main.async {
completion(rollGroups)
}
}
}
}

可能的解决方案

看看这段代码,一切似乎都很好,我只想确认你的方法的completion肯定是@escaping: completion(),否则它可能会导致这个问题

此外,在中封装实际的DB调用(collection.addSnapshotListener)可能是值得的

DispatchQueue.global(qos: .background).async

只是想看看这是否有什么不同,理论上不应该,但尽管如此,还是值得一试

相关内容

  • 没有找到相关文章

最新更新