ios8 - ventana nil inesperada en_UIApplicationHandleEventFromQueueEvent
hittest uiwindow (11)
Una de mis aplicaciones anteriores no funciona con iOS8. Cuando inicio la aplicación y trato de tocar la pantalla en cualquier lugar, aparece este mensaje en mi consola:
unexpected nil window in _UIApplicationHandleEventFromQueueEvent,
_windowServerHitTestWindow: <UIWindow: 0x7fe4d3e52660; frame = (0 0; 320 568);
opaque = NO; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x7fe4d3e2c450>;
layer = <UIWindowLayer: 0x7fe4d3e86a10>>
Estoy usando un viejo estilo MainWindow.xib. En MainWindow.xib está mi objeto Window, así como UINavigationController, que también tiene definido su primer View Controller. La imagen a continuación muestra los Outlets conectados al delegado de la aplicación.
La "vista" blanca en la captura de pantalla siguiente es la ventana UI. La vista de la derecha es UINavigationController (barra de navegación oculta) con el primer ViewController definido en su interior.
¿Cómo soluciono esto sin volver a crear toda la aplicación desde cero con un nuevo proyecto?
EDITAR: Acabo de descubrir que hay una tira TINY donde mis botones recibirán sus golpes / clics.
También noté que mi self.view.window es nula. ¿Cómo me aseguro de que esté configurado?
A veces es simplemente una configuración simple que le falta algo de valor: haga clic en el elemento de nombre del Proyecto (como lo denominó su proyecto) y luego asegúrese de que la pestaña General esté seleccionada y vaya al final. Busque los íconos de la aplicación y las imágenes de inicio para asegurarse de que haya algún valor en el campo Iniciar archivo de pantalla , esto debe ser Principal o LaunchScreen
Adicional a la respuesta BH. También mira esta respuesta .
Tengo este problema cuando lanzo mi aplicación solo paisaje desde orientación vertical (también la aplicación no se debe presentar en la lista de aplicaciones recientemente abiertas, que se puede ver presionando el botón Inicio dos veces. Tal vez, iOS de alguna manera almacena en caché la orientación y el tamaño de la ventana).
Mi código era
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self.window makeKeyAndVisible];
Configuré la máscara de aumento de tamaño W+H
para la ventana, no me ayudó, porque la ventana no cambia de tamaño en la rotación, pero la matriz de transform
se cambia.
La solución es simple
self.window = [UIWindow new];
[self.window makeKeyAndVisible];
self.window.frame = [[UIScreen mainScreen] bounds];
Entonces, el marco se establece DESPUÉS de que la ventana obtenga su orientación del controlador de vista raíz.
El uso de la nueva propiedad UIScreen de ios 8 ''nativeBounds'' en lugar de ''bounds'' al crear la ventana me arregló el problema. No se requieren otros cambios.
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] nativeBounds]] autorelease];
Para apoyar la versión anterior también, hago un control en tiempo de ejecución con la versión:
if([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
En caso de que alguien lo encuentre útil:
En mi caso, yo había usado
self.window = [[UIWindow alloc] init];
en lugar de
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
y esa fue la razón del problema.
En caso de que esto ayude a cualquier otra persona que tropiece aquí, también recibí este error cuando tuve el UIScreen.mainScreen().bounds
volteado al establecer el marco de la ventana.
No pude probar la solución de efpies
, pero la forma en que lo arreglé en mi aplicación fue reemplazar MainWindow.xib con Storyboard.
No tiene que agregar ningún código para solucionar esto.
Abra el archivo xib principal y busque "Ventana" desde el lado izquierdo y habilite Visible at Launch
Full Screen at launch
y Full Screen at launch
.
Recibí este error en una aplicación anterior que no tenía la pantalla de inicio [email protected]. Cuando se introdujeron por primera vez los iPhones más altos, esta fue la señal para iOS de que la aplicación podría manejar la nueva geometría. De lo contrario, se mostró en una ventana de 320x480. Es curioso, ni siquiera noté que la aplicación no estaba usando la pantalla completa.
Revisa tu archivo Window Nib y asegúrate de que esté ocupando toda la pantalla. Tuve un problema similar en mi aplicación donde los eventos táctiles no se registraban en una franja del lado derecho. Una vez que configuré MainWindow.xib para que ocupara la pantalla completa, no tuve más errores y los eventos táctiles volvieron a funcionar. Mi aplicación también se mostraba en Landscape pero mi MainWindow.xib tenía dimensiones de retrato.
También estoy actualizando mi antiguo proyecto a iOS 7 e iOS 8. En realidad, no uso MainWindow.xib, sino que creo window
manualmente en la application:didFinishLaunchingWithOptions:
Pero tengo la misma unexpected nil window in _UIApplicationHandleEventFromQueueEvent
error unexpected nil window in _UIApplicationHandleEventFromQueueEvent
después del lanzamiento.
Entonces, en mi caso, el problema se resolvió cambiando el destino de implementación a 6.0
y reemplazando el código en main.m
:
Viejo main.m:
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
Nuevo main.m:
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([YourAppDelegate class]));
}
}
Tuvimos el mismo problema, y probamos las soluciones propuestas en este hilo sin éxito.
Lo que terminó trabajando para nosotros fue volver a escribir la lógica para que sea puramente programática en lugar de usar xib. Después de esto, no vemos el error "ventana nula inesperada" y la vista está recibiendo el golpe en toda la pantalla.