我的应用程序有一个带有正确设置的 rootview 控制器的 UIWindow。我知道这一点,因为我在设置 rootViewController 后检查它(在应用程序委托中),一切都很好。
一旦我的应用程序启动,一切正常。我的问题是,当我签入“主”视图时,UIWindow 上的 rootview 控制器不再正确设置。
我的应用程序运行良好.. 那么您可能想知道的问题是什么......好吧,我正在尝试实现 AdColony(视频广告),他们需要获取 UIWindow 的 rotviewcontroller 来显示他们的广告。当他们检查 rootviewcontroller 时......它是空的。
我也添加了代码来检查.. rootviewcontroller 为空。
我的 UIWindow 如何丢失指向 rootviewcontroller 的指针?我需要帮助了解 UIWindow 架构的工作原理。
谢谢
检查 UIWindow 的可见控制器的代码(下面的代码为 viewcontrollers 值返回 nil。
UIWindow* window = [UIApplication sharedApplication].keyWindow;
UIViewController* rootViewController = [window rootViewController];
[self getVisibleViewControllerChild:rootViewController];
- (UIViewController*)getVisibleViewControllerChild:(UIViewController*)viewController {
UIViewController* visibleViewController = nil;
if(!viewController) {
NSLog(@"nil");
return nil;
}
if ([viewController isKindOfClass:[UINavigationController class]]) {
UINavigationController* navigationController = (UINavigationController*)viewController;
viewController = navigationController.visibleViewController;
NSLog(@"viewcontroller is nav controller");
}
while (visibleViewController == nil) {
if (viewController.modalViewController == nil) {
visibleViewController = viewController;
NSLog(@"visibleViewController = %@", visibleViewController);
} else {
if ([viewController.modalViewController isKindOfClass:[UINavigationController class]]) {
UINavigationController *navigationController = (UINavigationController *)viewController.modalViewController;
viewController = navigationController.visibleViewController;
NSLog(@"modal 1");
} else {
viewController = viewController.modalViewController;
NSLog(@"modal 2");
}
}
}
return visibleViewController;
}