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

Ios 由于未捕获异常NSInvalidArgumentException而终止应用程序,ios,swift,admob,game-center,Ios,Swift,Admob,Game Center,我有一个应用程序,其中包括游戏中心排行榜和Admob横幅。广告是实时的,当我通过Xcode 8在实际设备上运行应用程序时,它运行良好。但是,当我从Xcode 8启动模拟器时,应用程序会加载,但几秒钟后,我出现了错误: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Application tried to present modal view con

我有一个应用程序,其中包括游戏中心排行榜和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>.'
并调用通知,从场景类中显示/隐藏横幅,如下所示:

  NotificationCenter.default.post(name: NSNotification.Name(rawValue: "showbannerad"), object: nil);
我在自己的类中初始化Game Center对象,并从开始屏幕调用其init方法Game Center控制器的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;
    }
}

奇怪的是,它可以在实际设备上工作,但不能在模拟器上工作。如果你想了解更多细节,请告诉我。谢谢

在localPlayer.authenticateHandler中,有一个视图,该视图是什么类?它是否为AuthenticateViewController?如果是,这就是问题所在。
错误消息很清楚,一些ViewController调用present it self.

在localPlayer.authenticateHandler中,有一个视图,它是什么类?它是不是身份验证ViewController?如果是,这就是问题所在。
错误信息很清楚,一些ViewController称当前为它自己。

什么是
mybanner
?为什么将其
rootViewController
设置为自身??这似乎是问题所在。显示您正在使用通知调用的
funcs
。我的横幅是Admob横幅。它在GameViewController类中。什么是
mybanner
?为什么将其
rootViewController
设置为自身??这似乎是问题所在。显示您正在使用通知调用的
funcs
。我的横幅是Admob横幅。它位于GameViewController类中。
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;
    }
}