真的類似於這樣的問題:UIStoryboard load from app delegate
你應該在視圖控制器在Interface Builder的標識部分設置故事板ID。然後,你可以通過
UIViewController *viewControllerToShow = [storyboard instantiateViewControllerWithIdentifier:@"MyViewController"];
獲取屏幕上,你最終會像這樣的東西:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:[NSBundle mainBundle]];
UIViewController *vc = nil;
if (someKindOfCheck) {
vc = [storyboard instantiateViewControllerWithIdentifier:@"MyViewController"];
}
else {
vc =[storyboard instantiateInitialViewController];
}
// Set root view controller and make windows visible
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = vc;
[self.window makeKeyAndVisible];
return YES;
}
竊不以爲然。這將導致「登錄屏幕」始終被創建,即使它不是必需的。我會在應用程序委託中進行手動初始化。 – ullstrm 2014-10-31 06:38:12
這是一個不成熟的優化。 iOS始終加載和卸載視圖控制器。我們爲什麼不相信它做正確的事情?實際上,應用程序委託中的初始化過度限制了操作系統 - 它被迫在特定的時間加載故事板。我們如何知道在didFinishLaunchingWithOptions被調用的時候它還沒有加載故事板?在高級編程環境中 - 尤其是iOS - 最好不要與系統對抗。 – 2014-10-31 08:57:28
你也可以爭辯說,登錄屏幕不應該在viewDidLoad中處理這個邏輯。在我看來,它應該在它的「外面」處理。這不僅僅是過早優化的哲學問題。 – ullstrm 2014-10-31 09:14:31