You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 10:34:51