我将adcolony视频广告整合到我的iPhone游戏中。显示广告时出现错误

“ADCOLONY 2.0.1 [ *错误* ] AdColony有广告,但无法显示它们。AdColony无法找到您的应用程序当前可见的UIViewController。请确保您的关键UIWindow具有rootViewController。

当我检查appdelegate中的代码时,我们已经像这样设置了UIWindow的rootviewcontroller:
self.viewController_ipad = [[ViewController_ipad alloc] initWithNibName:nil bundle:nil] ; window.rootViewController = self.viewController_ipad; [window makeKeyAndVisible];
我仍然收到此错误。请指导我们正确的方向来解决这个问题?

提前致谢!

最佳答案

我收到了Adcolony工程师的回复:
AdColony查找在应用程序键UIViewController中显示的可见UIWindow,然后将用于显示广告的模式视图控制器推到顶部。广告制作完成后,我们的SDK会关闭模态视图控制器,使您的应用保持之前的状态。如果我们的SDK为您的应用程序的最高视图控制器获取nil值,则会遇到您提到的错误。

我可以告诉你,过去,如果开发人员使用UIAlertView中的按钮来触发AdColony视频广告,就会发生此问题。如果是这种情况,并且您是从UIAlertViewUIActionSheet触发视频的,我们强烈建议您在致电播放视频之前确保将其完全关闭。

我想尽快为您解决问题。无论如何,您是否可以向我们发送代码的精简版本以重现该问题?如果那是不可能的,我建议将以下代码粘贴到您尝试播放视频的位置,并使用调试器确定在哪里获得nil值。

UIWindow* window = [UIApplication sharedApplication].keyWindow;
UIViewController* rootViewController = [window rootViewController];
[self getVisibleViewControllerChild:rootViewController];

这是我们使用的方法getVisibleViewControllerChild:
- (UIViewController*)getVisibleViewControllerChild:(UIViewController*)viewController {

UIViewController* visibleViewController = nil;

if(!viewController) {
return nil;
}

if ([viewController isKindOfClass:[UINavigationController class]]) {
UINavigationController* navigationController = (UINavigationController*)viewController;
viewController = navigationController.visibleViewController;
}

while (visibleViewController == nil) {

if (viewController.modalViewController == nil) {
visibleViewController = viewController;
} else {

if ([viewController.modalViewController isKindOfClass:[UINavigationController class]]) {
UINavigationController *navigationController = (UINavigationController *)viewController.modalViewController;
viewController = navigationController.visibleViewController;
} else {
viewController = viewController.modalViewController;
}
}

}

return visibleViewController;
}

希望这对遇到类似问题的其他人有所帮助。

07-28 03:17