2014-08-30 98 views
0

我從一個類C類執行一些數據加載任務,一旦加載完成,我只想顯示在故事板中準備的Viewcontroller子類。從非UI類顯示ViewController

所以,當一切都很好,下面的方法被稱爲:

- (void)loadingNextView 
{ 
    CABBndGSite *mySite = [CABBndGSite alloc]; 

    CABBndGSelectLanguageViewController *vc = [[mySite myRootViewController].storyboard instantiateViewControllerWithIdentifier:@"SelectLanguageViewController"]; 
[[mySite myRootViewController] presentViewController:vc animated:YES completion:nil]; 

} 

所以我覈實,myRootViewController不爲零。這是一個UINavigationController類。 vc不是零,所以它在故事板中找到了我的視圖。 無論如何,presentViewcontroller消息似乎在做什麼預期。

當然是一個愚蠢的錯誤,但我可憐的iOS編程知識讓我在霧中!

我使用此代碼從ViewController子類成功,因爲我在這裏得到一個有效的ViewController指針,我不明白爲什麼它不起作用。

我也嘗試實現這裏解釋的AppDelegate方法How to launch a ViewController from a Non ViewController class?但我得到一個零導航指針。也許在我的應用程序中連接不好 我可以有一些解釋嗎?

親切的問候,

+1

您沒有初始化'mySite'。 – Kevin 2014-08-30 17:14:49

+0

凱文絕對正確:你需要分配_and_init。 – nzeltzer 2014-08-30 17:27:13

+0

不確定它真的需要,mySite指向已經初始化的單例,並且我在這裏得到正確的指針。 – 2ndGAB 2014-08-31 07:35:28

回答

1

UINavigationController維護一堆視圖控制器。您可以通過viewControllers屬性訪問此堆棧。提出您的視圖控制器,您可以:

  • (一)具有導航控制器推新視圖控制器上 堆棧(pushViewController:動畫:); (b)在視圖控制器堆棧中存在頂視圖控制器 模態地創建新視圖控制器(presentViewController:animated:completion :),或;

  • (c)中手動地通過分配新viewControllers陣列到導航 控制器的viewControllers屬性(setViewControllers :)新視圖控制器添加到視圖控制器堆疊陣列 。

+0

看來我是這樣的情況。無論如何,我在其他ViewController中使用presentViewController,所以UI對象成功(我在這裏的第三頁)。那麼即使我第一次嘗試顯示另一個VC,我可以在ViewController中使用presentViewController嗎?我試圖使用pushViewController,但AFAIR xCode告訴我,在此上下文中沒有可用的pushViewController實例。我會再次檢查。 – 2ndGAB 2014-08-31 07:42:42

+0

導航控制器需要「推送」視圖控制器。如果你「呈現」一個視圖控制器,那麼這個視圖控制器不會被添加到現有的導航堆棧中 - 它只是自己掛在那裏。在不對設計做出判斷的情況下,您聽起來像需要以root用戶的「呈現」視圖控制器創建導航控制器; 「呈現」_navigation controller_;然後「推」你的下一個視圖控制器。另外,看看這個前面的問題:: http:// stackoverflow。com/questions/8044644/ios-pushviewcontroller-vs-presentmodalviewcontroller-difference – nzeltzer 2014-08-31 19:52:44

+0

所以我明白了在我的應用程序中會發生什麼:事實上,我用presentViewController顯示了當前的viewcontroller,也就是說,presentViewController不會顯示下一個ViewController,也不會顯示pushViewController 。這是我不明白。我必須明確否定presentViewController之前顯示的那個嗎? – 2ndGAB 2014-09-02 08:46:48