2011-10-24 16 views
9

Antes de realizar cualquier tipo de desarrollo de iOS 5.0 utilizando Xcode 4.2, Xcode ha proporcionado un "MainWindow.xib" en las plantillas. Después de descargar y jugar con Xcode 4.2 con iOS 5.0, noté que ninguna de las plantillas proporcionadas incluye ningún archivo "MainWindow.xib". ¿Necesitamos esto más? Noté que en el método "application didFinishLaunchingWithOptions" en App_Delegate que las plantillas ahora incluyen código que crea alguna "UIWindow" y si tiene algún controlador de navegación, actualiza la ventana en consecuencia.¿Es realmente necesario un MainWindow.xib en la aplicación iOS?

// code that was pulled from a Master Detail application template 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 

    MasterViewController *masterViewController = [[MasterViewController alloc] initWithNibName:@"MasterViewController" bundle:nil]; 
    self.navigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController]; 
    self.window.rootViewController = self.navigationController; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

Creo que mi pregunta es, ¿necesito un "MainWindow.xib" por más tiempo, y si es así, entonces ¿por qué las plantillas de Apple les excluyo?

Respuesta

4

Creo que la razón por la que ahora está ausente es que crear una ventana mediante programación es mucho más eficiente que abrir un archivo xib y desarchivar los objetos. En general, si puede hacerlo en una línea de código, debe hacerlo en el código.

Lea la respuesta de Matthew Gillingham para obtener instrucciones sobre cómo cambiar manualmente un proyecto antiguo para que funcione sin MainWindow.xib.

+0

Entonces, ¿cree que eludir el "MainWindow.xib" es el camino a seguir para todos los proyectos futuros? – 5StringRyan

+2

Sí, siempre creo una ventana programáticamente para todos mis proyectos porque, ya sabes, lo primero que aparece en la ventana es administrado por un controlador de vista de todos modos. Tener un xib con solo una ventana y nada más no te da ninguna ventaja. – Costique

15

Siempre ha sido una opción no utilizar MainWindow.xib. El UIWindow se pudo cargar mediante programación por el haciendo lo siguiente:

1) Asegurarse de que la llamada a UIApplicationMain en main.m se ve así:

UIApplicationMain(argc, argv, nil, @"MyAppDelegateClassName"); 

en lugar de esto:

UIApplicationMain(argc, argv, nil, nil); 

2) Asegurándose de que Info.plist no tenga un valor de "MainWindow.xib" como archivo principal de punta.

3) Cargando la ventana de UI mediante programación en el delegado de la aplicación.

Así que no, no tiene que usar MainWindow.xib y, en realidad, nunca lo ha hecho. Siempre puedes hacer cosas programáticamente.

Es una buena pregunta por qué Apple hizo este cambio en la configuración predeterminada de Xcode, y no sé la respuesta. Pero puede tener que ver con el rendimiento o la transición a ARC o tamaños de archivo de aplicación pequeña o algo completamente diferente.

+0

¿Es posible proporcionar un par de ventajas y desventajas? Supongo que estoy tratando de descubrir cuál sería la mejor apuesta para avanzar en el uso o no uso de "MainWindow.xib". – 5StringRyan

+0

Lo he estado pensando, y en realidad estoy teniendo problemas para encontrar demasiados profesionales. Supongo que le permitió configurar una aplicación basada en la barra de pestañas (o tal vez un controlador de navegación) en una forma un poco más visual, ya que podría manipular la vista de contenedor en Interface Builder.Ahora cuando creo una nueva aplicación de barra de pestañas con la plantilla, la barra de pestañas solo existe en el código. Pero como todavía es fácil crear y usar controladores de vista con Interface Builder, es difícil para mí pensar que se ha perdido mucho. Probablemente avanzaría sin usar MainWindow.xib. –

2

Siempre me siento confundido acerca del uso de MainWindow.xib: incluso con él, todavía tengo que configurar WindowViewController o addSubview de la ventana. ¿Esa información no está contenida en MainWindow.xib? ¿Por qué todavía necesito decirle a Window sobre eso?

Por lo tanto, eliminar MainWindow.xib parece tener sentido.

Cuestiones relacionadas