iOS self.window: ¿cuándo se crea?

cuando inicia su aplicación con una plantilla de vista única, y agrega NSLog(@"self.window = %@", self.window); en su primera línea de la application: didFinishLaunchingWithOptions: AppDelegate.m application: didFinishLaunchingWithOptions: método, puede ver que self.window existe en su aplicación.

Sin embargo, cuando inicia su aplicación con una plantilla vacía e intentó registrar la self.window en la console, el resultado devuelve un null . Incluso si agrega storyboard y un controller de vista, y configura su controller de vista como el controller de vista inicial e intenta registrar el self.window , el resultado es el mismo: su valor se establece en null .

Y tenga en count que, cualquiera que sea la forma que adopte, puede encontrar que declara la @property (strong, nonatomic) UIWindow *window; en AppDelegate.h de forma pnetworkingeterminada. Entonces me pregunto por qué en el primer caso, puede ver que self.window se inicializa y establece el valor, pero no en este último caso. Además, si self.window ya está declarado e inicializado en el primer caso, pero NO en el segundo caso, ¿cómo puedo encontrar el código de initialization?

Parece que en ambos casos, la statement @property es la misma, y ​​en ambos casos, como mencioné, intenté registrar el valor de self.window en FIRST LINE de la application: didFinishLaunchingWithOptions: AppDelegate.m application: didFinishLaunchingWithOptions: method.

¿Todo lo que me falta? No sé por qué esos dos casos actúan de manera diferente a pesar de que no encuentro ninguna diferencia tanto en el código como en el storyboard.

Yo uso iOS 7 y Xcode 5. Gracias.

Bien, cuando crea un proyecto con un Storyboard o Nib, la configuration del proyecto le dirá al proyecto que el guión gráfico / plumilla es la "Interfaz principal".

Esto activa la aplicación para cargar esa interfaz al inicio. Esta es la razón por la que se crea el self.window en estos casos.

Cuando crea una aplicación vacía, no hay una interfaz para establecer como la interfaz principal.

Entonces necesitas crear la window tú mismo así …

 -(void)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; UIViewController *someController = [UIViewController... //create your initial controller [self.window addSubview:navigationController.view]; [self.window makeKeyAndVisible]; } 

Algo así de todos modos. Ha pasado un time.

De forma alternativa, si crea una aplicación vacía y luego agrega un file de plumín que desea usar como plumín inicial, puede seleccionarlo en la configuration del proyecto.

En el objective en general. En la sección "Información de deployment", select la "Interfaz principal" de las nibs en su proyecto. Esto cargará esa punta cuando se inicie la aplicación.

Xcode declara UIWindow como Objeto IBOutlet en Appdelegate y xcode se engancha o lo conecta con la window del ViewController.nib pnetworkingeterminado (creado por Xcode cuando crea un proyecto no vacío). No es necesario inicializar ningún object si lo ha declarado como Iboutlet y lo conecté con cualquier UIController en punta.

Ahora, en el proyecto vacío, si desea crear una window, declare como salida y conéctelo con la window existente en la punta y haga su AppDelegate como Files OWner.