Firestore数据获取异常:TrainingView无法显示staff集合status字段数据
问题排查与修复方案
核心问题分析
- 集合名称错误:你需要读取
staff集合的数据,但代码中调用的是db.collection("users"),指向了错误的集合,导致无法获取目标数据。 - 未触发数据加载:
TrainingView中仅实例化了StaffAccountModel,但没有调用getData()方法,数据从未开始加载。
修复后的代码
修改StaffAccountModel的集合指向与错误日志
class StaffAccountModel: ObservableObject { @Published var staffAccount0 = [StaffAccount]() func getData() { let db = Firestore.firestore() // 修正集合名称为staff db.collection("staff").getDocuments { snapshot, error in if let error = error { // 添加错误打印,方便排查问题 print("读取数据失败:\(error.localizedDescription)") return } guard let snapshot = snapshot else { return } DispatchQueue.main.async { self.staffAccount0 = snapshot.documents.map { d in StaffAccount( id: d.documentID, email: d["email"] as? String ?? "", password: d["password"] as? String ?? "", status: d["status"] as? String ?? "" ) } } } } }
修改TrainingView触发数据加载
struct TrainingView: View { @ObservedObject var staffAccount = StaffAccountModel() var body: some View { VStack { List(staffAccount.staffAccount0) { item in Text("\(item.status)") } } // 视图出现时调用数据加载方法 .onAppear { staffAccount.getData() } } }
额外排查建议
- 确认Firestore的
staff集合中,目标文档确实存在status字段,且字段类型为字符串(若为其他类型,需调整代码的类型转换逻辑)。 - 检查Firebase安全规则,确保当前用户拥有
staff集合的读取权限,权限不足会导致数据读取失败。 - 运行代码后查看控制台日志,若有错误信息可直接定位问题(比如网络问题、权限问题)。
内容的提问来源于stack exchange,提问作者Danila Bykhovoy
相关产品推荐
相关产品推荐

