我有一个应用程序,其中包含游戏中心排行榜,并包含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;
}
}
奇怪的是,它适用于实际设备,但不适用于模拟器。如果您想了解更多详情,请通知我。谢谢。
答案 0 :(得分:2)
在localPlayer.authenticateHandler中,有一个视图,什么是类?是GKHostedAuthenticateViewController吗?。如果是,那就是问题所在。 错误信息是清楚的,一些ViewController调用它自己的现在。