В моем приложении есть UIWindow с правильно настроенным контроллером rootview. Я знаю это, потому что я проверяю rootViewController после его установки (в делегате приложения), и все в порядке.
Как только мое приложение запускается, все работает нормально. Моя проблема в том, что контроллер rootview больше не устанавливается правильно в UIWindow, когда я проверяю «основной» вид.
Мое приложение работает нормально... так в чем проблема, которая может вас заинтересовать... ну, я пытаюсь внедрить AdColony (видеореклама), и им нужно захватить rotviewcontroller UIWindow, чтобы отобразить их рекламу. Когда они проверяют rootviewcontroller... он равен нулю.
Я также добавил код для проверки... и rootviewcontroller имеет значение null.
Как мой UIWindow может потерять указатель на rootviewcontroller? Мне нужна помощь в понимании того, как работает архитектура UIWindow.
Спасибо
код, который проверяет видимый контроллер UIWindow (приведенный ниже код возвращает nil для значения viewcontrollers.
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;
}