由于未捕获的异常而终止应用程序NSInvalidArgumentException

时间:2017-07-15 21:11:02

标签: ios swift admob game-center

我有一个应用程序,其中包含游戏中心排行榜,并包含Admob横幅。广告是实时的,当我通过Xcode 8在实际设备上运行应用程序时,它运行正常。但是当我从Xcode 8启动一个模拟器时,应用程序会加载,但几秒钟后我就会出错:

    *** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
        reason: 'Application tried to present modal view controller on itself. Presenting controller is <GKHostedAuthenticateViewController: 0x7f818d749310>.'

我目前正在我的视图控制器中设置横幅广告,如下所示:

    mybanner.adUnitID = "XXX";
    super.viewDidLoad();

    mybanner.rootViewController = self;
    mybanner.delegate = self;
    let request = GADRequest();
    mybanner.load(request);

    //view.addConstraint(NSLayoutConstraint(item: mybanner, attribute: .bottom, relatedBy: .equal, toItem: view, attribute: .bottom, multiplier: 1, constant: 0));
    //view.addConstraint(NSLayoutConstraint(item: mybanner, attribute: .centerX, relatedBy: .equal, toItem: view, attribute: .centerX, multiplier: 1, constant: 0));

    NotificationCenter.default.addObserver(self, selector: #selector(self.showBannerAd), name: NSNotification.Name(rawValue: "showbannerad"), object: nil);
    NotificationCenter.default.addObserver(self, selector: #selector(self.hideBannerAd), name: NSNotification.Name(rawValue: "hidebannerad"), object: nil);

调用通知以显示/隐藏场景类中的横幅,如下所示:

  NotificationCenter.default.post(name: NSNotification.Name(rawValue: "showbannerad"), object: nil);

我正在自己的类中初始化我的Game Center对象,并从开始屏幕调用其init方法,Game Center Controller的init如下:

func authPlayer(scene: SKScene) {
    let localPlayer = GKLocalPlayer.localPlayer();

    localPlayer.authenticateHandler = {
        (view, error) in
        if view != nil {
            view!.present(view!, animated: true, completion: nil);
        }else {
            print(GKLocalPlayer.localPlayer().isAuthenticated);
        }
    }
}

  /// In the GamvViewController
  func showBannerAd() {
    if mybanner.isHidden == true {
        mybanner.isHidden = false;
    }
}

奇怪的是,它适用于实际设备,但不适用于模拟器。如果您想了解更多详情,请通知我。谢谢。

1 个答案:

答案 0 :(得分:2)

在localPlayer.authenticateHandler中,有一个视图,什么是类?是GKHostedAuthenticateViewController吗?。如果是,那就是问题所在。 错误信息是清楚的,一些ViewController调用它自己的现在。