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

集成AdMob遇Thread 1致命错误:解包可选值时意外发现nil

解决AdMob集成时出现的Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value错误

我之前也踩过这个AdMob集成的坑!这种nil解包崩溃几乎都是和GADBannerView的初始化或配置有关,结合你给出的代码开头,给你几个最常见的排查方向:

  • 检查GADBannerView的初始化与关联
    如果你是用Storyboard/Xib拖线创建的BannerView,一定要确认IBOutlet已经正确关联到ViewController的属性上——有时候拖线没拖到位,或者属性名改了但Storyboard里没同步,就会导致bannerView还是nil就被调用。
    如果是纯代码初始化,要确保在使用前完成内存分配:

    // 正确的代码初始化示例
    var bannerView: GADBannerView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        bannerView = GADBannerView(adSize: kGADAdSizeBanner)
        bannerView.delegate = self
        // 后续添加到视图、设置位置等操作
    }
    

    别在viewDidLoad之前就去访问bannerView,比如在类的初始化方法里就设置delegate,这时候视图还没加载,属性肯定是nil。

  • 检查AdMob的基础配置
    一定要确认Info.plist里已经添加了GADApplicationIdentifier字段,值是你在AdMob后台获取的应用ID——这个配置缺失会导致SDK初始化失败,间接让BannerView创建失败。
    另外,虽然新版本AdMob SDK已经不需要手动启动,但如果是旧版本,别忘了在AppDelegate的didFinishLaunchingWithOptions里调用:

    GADMobileAds.sharedInstance().start(completionHandler: nil)
    
  • 检查广告加载的时机
    调用bannerView.load(GADRequest())之前,必须确保bannerView已经被初始化,并且已经添加到当前视图的层级中——如果还没把BannerView加到view上就加载广告,也可能触发nil相关的崩溃。

对了,你只贴了类的声明部分,最好把viewDidLoad里处理BannerView的代码也补充出来,这样能更精准定位问题!

内容的提问来源于stack exchange,提问作者Nol4635

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:07:30