2

我正在将 adcolony 视频广告集成到我的 iphone 游戏中。显示广告时,我们收到错误

“ ADCOLONY 2.0.1 [ * ERROR * ] 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];

我仍然收到此错误。请指导我们正确的方向来解决这个问题?

提前致谢!

4

1 回答 1

2

我收到了Adcolony工程师的回复:

AdColony找到UIViewController应用程序的 key 中显示的可见UIWindow内容,然后将用于显示广告的模态视图控制器推到顶部。广告完成后,我们SDK会关闭模态视图控制器,让您的应用保持之前的状态。SDK如果我们为您的应用程序的最顶层视图控制器获取 nil 值,您将遇到您提到的错误。

我可以告诉你,在过去,如果开发人员使用一个按钮UIAlertView来触发 AdColony 视频广告,就会出现这个问题。如果是这种情况,并且您正在从 aUIAlertView或 a触发视频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;
}

希望这可以帮助其他遇到类似问题的人。

于 2013-06-12T19:11:02.010 回答