2015-12-31 73 views
1

我在我的應用程序委託編碼登錄網頁,其中(該方法應用在中:didFinishLaunchingWithOptions :)設置爲與根視圖控制器在窗口層次視圖不

[self.window setRootViewController:vc]; 

其中,Vc我的根視圖控制器是我的HomeVC的實例化。
此視圖正確加載。我可以在所有的登錄得很好,但所需的數據,只要我試圖進入並加載另一種觀點認爲,我得到

Warning: Attempt to present <RegisterVC: 0x7d07f520> on 
     <HomeVC: 0x7d374830> whose view is not in the window hierarchy! 

我試用了一下黑客是一定的,通過以下得到了最頂部的視圖控制器代碼:

- (UIViewController*) topMostController 
{ 
    UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController; 

    while (topController.presentedViewController) { 
     topController = topController.presentedViewController; 
    } 

    return topController; 
} 

但是,據我所知,它只返回當前的視圖控制器,這也是根視圖控制器。它甚至從來沒有進入while循環。

我無法理解我試圖調用的視圖控制器如何不在層次結構中,因爲它不僅顯示正確,而且也是根本層次上的只有視圖。編輯1:我將包含AppDelegate應用程序:didFinishLaunchingWithOptions:方法的部分,我創建並添加VC和導航VC。

UIViewController *vc = (HomeVC *)[[HomeVC alloc] initWithNibName:NSStringFromClass([HomeVC class]) bundle:nil]; 
    self.navigationController = [[UINavigationController alloc] initWithRootViewController:vc]; 
    [self.navigationController setNavigationBarHidden:YES]; 

    [self.window setRootViewController:vc]; 
    //^^^This is the line I'm most suspicious of, is that correct?^^^ 
    [self.window setBackgroundColor:[UIColor colorWithHexString:kDefaultBackgroundColor]]; 
    [self.window makeKeyAndVisible]; 
+0

'[UIApplication sharedApplication] .window.rootViewController'的結果是什麼? (你必須將它轉換爲你的UIApplicationDelegate的類型) – chedabob

+0

它也不會觸及那個while循環,因爲'presentedViewController'是通過'presentViewController:animated:completion:' – chedabob

+0

嘗試編譯代碼時出現錯誤,您的意思是keyWindow而不是窗口?因爲 'AppDelegate * app =(AppDelegate *)[UIApplication sharedApplication] .window.rootViewController' 剛結束時出現錯誤,說明在'UIApplication *類型的對象上找不到'屬性'窗口'。 如果你的意思是keyWindow,你會注意到在我的黑客中我實際上使用了精確的代碼來獲得最高控制器,這就是我最終返回的結果。 對於那個循環我應該用什麼來使它工作? –

回答

0

你可以得到窗口的根視圖控制器,它應該是導航控制器,然後得到它的頂視圖控制器。

試試這樣:如果你確定有一個viewController.presentedViewController,那麼發送includeModal爲YES。

- (UIViewController *)topmostViewControllerFrom:(UIViewController *)viewController 
           includeModal:(BOOL)includeModal 
{ 
    if ([viewController respondsToSelector:@selector(selectedViewController)]) 
    return [self topmostViewControllerFrom:[(id)viewController selectedViewController] 
           includeModal:includeModal]; 

    if (includeModal && viewController.presentedViewController) 
    return [self topmostViewControllerFrom:viewController.presentedViewController 
           includeModal:includeModal]; 

    if ([viewController respondsToSelector:@selector(topViewController)]) 
    return [self topmostViewControllerFrom:[(id)viewController topViewController] 
           includeModal:includeModal]; 

    return viewController; 
} 
+0

好吧,所以沒有任何if語句評估爲真,它只是返回傳入的viewController。雖然值得一試。 –

+0

此警告通常出現在故事​​板中,當它試圖同時執行2個賽段時。我相信在你試圖同時呈現2個視圖控制器的時候。 – ShaluRaj

+0

您是否嘗試將導航控制器設置爲rootviewcontroller,[self.window setRootViewController:_navigationController]; – ShaluRaj

相關問題