我几天来一直在解决以下问题,但我对此感到有点不安。所以我有一个项目文件https://github.com/PCmex/lift-side-memu-in-swift-3我用它成功启动了Cocoapod。我遵循了整个 admob 教程并完成了所有必需的步骤。当我尝试测试应用程序时,构建正常,但应用程序启动后它崩溃并提供以下信息:
Screenshot for error message: Thread 1: EXC_BAD_INSTRUCTION
日志提供了以下信息: Google 移动广告 SDK 版本:(GADRequest.sdkVersion()) fatal error :在解包可选值时意外发现 nil (lldb)
这是应用程序 delegate.swift
import UIKit
import GoogleMobileAds
import Firebase
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
//Use Firebase library to configure APIs
FirebaseApp.configure()
GADMobileAds.configure(withApplicationID: "ca-app-pub-***")
return true
}
func applicationWillResignActive(_ application: UIApplication) {
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
}
func applicationDidEnterBackground(_ application: UIApplication) {
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}
func applicationWillEnterForeground(_ application: UIApplication) {
// Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
}
func applicationDidBecomeActive(_ application: UIApplication) {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}
func applicationWillTerminate(_ application: UIApplication) {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
}
这是 ViewController.swift
import UIKit
import GoogleMobileAds
import Firebase
class ViewController: UIViewController {
@IBOutlet weak var btnMenuButton: UIBarButtonItem!
@IBOutlet weak var bannerView: GADBannerView!
override func viewDidLoad() {
super.viewDidLoad()
// Aanroepen print functie voor de Google AdMob banner
print("Google Mobile Ads SDK version:(GADRequest.sdkVersion())")
bannerView.adUnitID = "ca-app-pub-***"
bannerView.rootViewController = self
bannerView.load(GADRequest())
// Do any additional setup after loading the view, typically from a nib.
if revealViewController() != nil {
// revealViewController().rearViewRevealWidth = 62
btnMenuButton.target = revealViewController()
btnMenuButton.action = #selector(SWRevealViewController.revealToggle(_:))
// revealViewController().rightViewRevealWidth = 150
// extraButton.target = revealViewController()
// extraButton.action = "rightRevealToggle:"
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
我很确定我已经正确安装了 cocoa-pod/AdMob 和所有先决条件。当我完成新项目中的所有步骤时,一切正常。但我试图理解为什么它在我当前的项目中不起作用。希望有人能指出我正确的方向,提前致谢!
最佳答案
变量bannerView
是一个隐式解包的可选。这意味着它是可选变量类型。请记住,如果其值为 nil
,则展开选项将会崩溃,因此通常您会在展开之前进行一些可选链接(例如 if let
)进行测试,以防止崩溃了。在您的情况下,bannerView
为nil
,因此您的应用程序崩溃了。隐式解包可选是通过在其类型后面放置 !
来声明的(在您的情况下为 GADBannerView!
)。
我建议您转到 Controller 的 Storyboard(或 XIB),选择 GADBannerView
并转到连接检查器
并检查“引用 socket ”部分中是否有任何内容(“新引用 socket ”除外)。如果有,请单击X按钮断开连接。
然后删除 Controller 中的 @IBOutlet Weak var BannerView
行,并将 GADBannerView
重新连接到 ViewController
。如果该部分中没有任何内容,只需删除 @IBOutlet weak varbannerView
并将 GADBannerView
重新连接到 ViewController
关于Swift Admob 问题的主题 1 : EXC_BAD_INSTRUCTION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45139703/