pestañas pantalla multiventana dividida como cerrar aplicaciones abiertas ios xcode ios7 xcode5

ios - multiventana - pantalla dividida ipad



''NSInvalidArgumentException'', motivo: ''No se puede presentar la hoja porque la vista no está en una ventana (9)

Después de actualizar Xcode de la versión 4 a 5 y, por lo tanto, de iOS 6 a iOS 7, aparece el siguiente error:

''NSInvalidArgumentException'', motivo: ''No se puede presentar la hoja porque la vista no está en una ventana

en esta linea:

[actionSheet showInView:self.view];


En iOS 7, la vista enviada a showInView: debe ser la parte de la jerarquía de vistas. Debe añadirse como la subvista de alguna vista.
Puede verificar si se puede usar alguna vista en showInView: verificando si view.window es nula o no.
view.superview también debe ser no nulo


En mi caso, esto sucede cuando un controlador de vista que se acaba de colocar en la pila decide que quiere mostrar una hoja de alerta. Pero, aparentemente, el controlador de visualización aún no está completamente listo para hacerlo justo después de que se lo presione. Yo uso [actionSheet showInView:self.parentViewController.view]; en lugar de [actionSheet showInView:self.view]; .


He utilizado anteriormente

- (void)showFromTabBar:(UITabBar *)view;

y encontré un problema similar con uno de mis controladores (tengo un método de utilidad que maneja mostrar hojas de acción de varios controladores) mientras se establece

hidesBottomBarWhenPushed = YES;

Con iOS 7, esto ahora parece configurar la ventana a nula en la barra de tabulación causando el error mencionado. Mi solución es verificar la propiedad de la ventana del tabBar y si no hay ninguna llamada

if (nil == tabBar.window) { [actionSheet showInView:self.window]; } else { [actionSheet showFromTabBar:tabBar]; }


Literalmente tuve este mismo problema y desafortunadamente todavía no estoy seguro de cuál es la causa raíz del problema. Sin embargo, encontrarás mi solución actual a continuación. Si hago algún progreso en la raíz causando el problema, te lo haré saber.

UIWindow* window = [[[UIApplication sharedApplication] delegate] window]; if ([window.subviews containsObject:self.view]) { [emailSheet showInView:self.view]; } else { [emailSheet showInView:window]; }


No sé cuál es la causa raíz del problema, pero encontré una solución que funciona para mí. En lugar de self.view , coloque esta línea:

[[[[UIApplication sharedApplication] keyWindow] subviews] lastObject]

por ejemplo:

[actionSheet showInView:[[[[UIApplication sharedApplication] keyWindow] subviews] lastObject]];


Tengo el mismo problema. En mi código, la razón obviamente era que quería mostrar una hoja de acción en viewWillAppear: Después de mover el código a viewDidAppear: el error desapareció.


Tuve el mismo problema [actionSheet showInView:self.view]; y lo resolví con [actionSheet showInView:[UIApplication sharedApplication].keyWindow]; .

Quizás el problema esté relacionado con el párrafo de la documentación de Apple :

Notas de subclasificación:

UIActionSheet no está diseñado para ser subclasificado, ni debe agregar vistas a su jerarquía. Si necesita presentar una hoja con más personalización que la proporcionada por la API UIActionSheet, puede crear la suya y presentarla de manera modal con presentViewController:animated:completion:


Tuve el mismo problema y en mi caso, esto sucedió cuando intenté mostrar un ActionSheet en mi autoevaluación mientras que mi autovisión presentaba otro viewController.

Este es el bloqueo: "La hoja no se puede presentar porque la vista no está en una ventana"

Ejemplo para el problema:

[modalViewController dismissModalViewControllerAnimated:YES]; [actionSheet showInView:self.view];

Resolví el problema esperando a que el modalViewController descartara y luego mostrara la Hoja de Acción.

Solución:

[modalViewController dismissModalViewControllerAnimated:YES]; [actionSheet performSelector:@selector(showInView:) withObject:self.view afterDelay:0.6];

Espero que esto ayude a mucha gente :)


Tuve un problema similar con una barra de herramientas y siempre debería ser mejor verificar si la vista pasada al selector showInView tiene una ventana no nula. Por ejemplo:

if (self.view.window) [actionSheet showInView:self.view];

De esta manera, podemos evitar excepciones molestas. Luego, de acuerdo con el diseño de su aplicación, debe buscar una vista válida para mostrar la hoja de acción. Si su aplicación tiene una barra de pestañas o una barra de herramientas, debería ser mejor usar

- (void)showFromToolbar:(UIToolbar *)view; - (void)showFromTabBar:(UITabBar *)view;