0

几天来,我一直在研究以下问题,对此我感到有些不安。所以我有一个项目文件https://github.com/PCmex/lift-side-memu-in-swift-3并且我成功地用它启动了 Cocoapod。我遵循了整个 admob 教程并完成了所有必需的步骤。当我尝试测试应用程序时,构建是好的,但在应用程序启动后它崩溃并给我以下信息:

错误消息的屏幕截图:线程 1:EXC_BAD_INSTRUCTION

该日志为我提供了以下信息:Google Mobile Ads SDK version:(GADRequest.sdkVersion()) 致命错误:unwrapping an Optional value (lldb) 时意外发现 nil

这是应用程序 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 和所有先决条件。当我在一个新项目中完成所有步骤时,一切正常。但我试图理解为什么它在我当前的项目中不起作用。希望有人能指出我正确的方向,在此先感谢!

4

1 回答 1

0

该变量bannerView是一个隐式展开的 optional。这意味着它一个可选的变量类型。请记住,如果它的值为,则展开选项会崩溃nil,因此通常您会if let在展开之前进行一些可选链接测试以防止崩溃。在你的情况下,bannerViewis nil,所以你的应用程序崩溃了。!通过在其类型(在您的情况下为 )之后放置 a 来声明隐式展开的可选项GADBannerView!

我建议您转到控制器的情节提要(或 XIB),选择您的GADBannerView并转到连接检查器

连接检查员

并检查“参考插座”部分是否有任何内容(“新参考插座”除外)。如果有,请单击X按钮断开连接。

断开连接

然后删除@IBOutlet weak var bannerViewController 中的行并重新连接GADBannerViewViewController. 如果该部分中没有任何内容,只需删除@IBOutlet weak var bannerView并重新连接GADBannerViewViewController

于 2017-07-17T09:10:52.660 回答