私のアプリケーションには、rootviewコントローラーが正しく設定されたUIWindowがあります。(アプリデリゲートで)設定された後でrootViewControllerをチェックし、すべてが順調であるため、これを知っています。
アプリが起動すると、すべてが正常に機能します。私の問題は、「メイン」ビューをチェックインしたときに、ルートビューコントローラーがUIWindowで正しく設定されなくなったことです。
私のアプリは正常に動作します。それで、あなたが疑問に思うかもしれない問題は何ですか...まあ、私はAdColony(ビデオ広告)を実装しようとしています。彼らは広告を表示するためにUIWindowのrotviewcontrollerをつかむ必要があります。彼らがrootviewcontrollerをチェックするとき...それはnullです。
チェックするコードも追加しました。rootviewcontrollerがnullです。
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;
}