我将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视频广告,就会发生此问题。如果是这种情况,并且您是从UIAlertView
或UIActionSheet
触发视频的,我们强烈建议您在致电播放视频之前确保将其完全关闭。
我想尽快为您解决问题。无论如何,您是否可以向我们发送代码的精简版本以重现该问题?如果那是不可能的,我建议将以下代码粘贴到您尝试播放视频的位置,并使用调试器确定在哪里获得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;
}
希望这对遇到类似问题的其他人有所帮助。