Firestore异步查询代码崩溃求助:EXC_BAD_ACCESS错误
崩溃原因排查及解决方案
核心崩溃原因
Objective-C Runtime 不兼容 Swift 的 async/await 异步函数语法,直接用 @objc 修饰 async 方法会触发内存访问错误(EXC_BAD_ACCESS),这就是你在打印日志前就崩溃的根本原因——按钮点击回调绑定了不符合 Objective-C 调用规范的异步方法。
修复方案
1. 修改按钮点击方法的包装逻辑
将 @objc 修饰的方法改为同步方法,内部通过 Task 调用异步逻辑:
@objc func settingsButtonTapped() { print("settings button tapped") Task { await self.getMultipleAll() } }
2. 保留原异步查询方法不变
原有的 Firestore 查询方法无需修改,保持官方文档的实现即可:
private func getMultipleAll() async { // [START get_multiple_all] do { let querySnapshot = try await self.db.collection("cities").getDocuments() for document in querySnapshot.documents { print("\(document.documentID) => \(document.data())") } } catch { print("Error getting documents: \(error)") } // [END get_multiple_all] }
额外验证点
- 确认
self.db(Firestore 实例)已完成正确初始化,避免后续异步调用中出现隐式空指针问题。 - 检查按钮的点击事件绑定是否唯一,确保没有重复绑定或绑定到已被释放的对象实例。
内容的提问来源于stack exchange,提问作者Mason Ballowe
相关产品推荐
相关产品推荐

