¿Cómo carga XCode el guión gráfico principal?

Cuando creo una nueva aplicación de vista única en XCode 4.6 usando storyboard, podemos ver que la function principal crea una nueva aplicación usando el delegado de la aplicación así:

return UIApplicationMain(argc, argv, nil, NSStringFromClass([MyAppDelegate class])); 

Sin embargo, si miramos MyAppDelegate.h y MyAppDelegate.m, no hay ningún lugar en el código que haga reference a MainStoryboard.storyboard. Esto difiere de una versión no storyboard donde podemos encontrar la línea de código que carga el file nib mediante progtwigción.

Entonces, mi pregunta es: ¿cómo se carga el storyboard? (¿dónde debo search para encontrarlo?)

Gracias

Mira tu configuration de destino para el proyecto

introduzca la descripción de la imagen aquí

Observe la configuration de Storyboard principal.

Si quisieras hacer esto en código tú mismo, harías algo así.

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]]; UIViewController *vc = [storyboard instantiateInitialViewController]; // Set root view controller and make windows visible self.window.rootViewController = vc; [self.window makeKeyAndVisible]; return YES; } 

Eche un vistazo a la discusión de UIApplicationMain :

Discusión
Esta function instancia el object de aplicación de la class principal y crea una instancia del delegado (si corresponde) de la class dada y establece el delegado para la aplicación. También configura el bucle de evento principal, incluido el bucle de ejecución de la aplicación, y comienza a procesar events. Si el file Info.plist de la aplicación especifica un file de nib principal a cargar, al include la key NSMainNibFile y un nombre de file de nib válido para el valor, esta function carga ese file de nib.

Cuando se invoca UIApplicationMain , se carga un file Plist que contiene toda la información de la aplicación:

introduzca la descripción de la imagen aquí

Así es como "entiende" que el file xib / storyboard necesita cargarse.

Se inicia desde la configuration UIMainStoryboardFile desde su file info.plist. Xcode luego crea una window principal, crea una instancia de su primer controller de vista y lo agrega a la window. Todavía puede hacer esto en un código similar al .nib usando

 UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; UIViewController* initialView = [storyboard instantiateInitialViewController]; 

Si quieres instanciar con Swift

 var storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()) var vc : AnyObject! = storyboard.instantiateInitialViewController() self.window!.rootViewController = vc as UIViewController self.window!.makeKeyAndVisible() 

En Xcode, la sección Info.plist legible para humanos que determina el guión gráfico principal es:

Main storyboard file base name

En text plano, la key es UIMainStoryboardFile :

 <key>UIMainStoryboardFile</key> <string>Main</string> 

Un poco tarde para la fiesta, pero puedes ver el viewController desde la window como se muestra a continuación.

 @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { var viewController = window?.rootViewController as? ViewController if let viewController = viewController { // do awesome stuff } return true } }