2013-04-11 24 views
2

我在做什麼,這是:手動實例化ViewController並推入頂部。良好的做法?

UIViewController *rootController = [[[UIApplication sharedApplication] keyWindow] rootViewController]; 
AlarmRingViewController *alarmController = [[AlarmRingViewController alloc] init]; 
[rootController presentViewController:alarmController animated:YES]; 

什麼,我想這個才達到,是推動其上的時刻顯示任何其他控制器的頂部我AlarmRingViewController,它到目前爲止的作品。

現在,我想知道,如果這是很好的做法:

  • 應該呈現
  • 在非UI相關的類這麼做每次instatiate一個新的viewController? (在我來說,我的NSTimer調度)
  • 從那裏推新創建的viewController,頂部

的RootViewController的還是這確實違反了MVC模式或蘋果的指導方針或任何東西。 歡呼聲

回答

1

我個人認爲這是難看的代碼。這很難閱讀,也很難調試。將代碼分開一點:

UIViewController *rootController = [[[UIApplication sharedApplication] keyWindow] rootViewController]; 
AlarmRingViewController *alarmController = [[AlarmRingViewController alloc] init]; 
[rootController presentViewController:alarmController animated:YES]; 

將這麼多內容輸入到一行中沒有任何好處。

更新:基於您的更新問題:

是沒有問題的每一個你需要它的時候實例化一個新的視圖控制器。這很常見。創建一個並緩存它可能是合適的。這是一種優化,如果在任何給定時間只顯示一個視圖控制器,視圖控制器經常使用,並且需要大量時間來創建,那麼這種優化是有意義的。

視圖控制器通常由其他(視圖)控制器創建和呈現。

+0

是的,你是對的,醜陋的代碼風格,但我有其他的擔憂。看到更新的問題。 (現在使用你的代碼) – 2013-04-11 16:54:27

+0

我更新了我的答案。 – rmaddy 2013-04-11 16:59:52

+0

要清楚的是,你看到沒有任何問題干擾從控制器類這樣的UI流,並推動ontop? – 2013-04-11 17:08:33

0

爲什麼不使用UINavigationController作爲根視圖控制器?這樣,你可以這樣做:

AlarmRingViewController *alarmController = [[AlarmRingViewController alloc] init]; 
[self.navigationController presentViewController:alarmController animated:YES completion:nil];