iOS: advertencia "intento de presentar ViewController cuya vista no está en la jerarquía de la ventana"
objective-c uiactivityviewcontroller (4)
Análisis: debido a que la vista modal actual de la clase ViewController no se ha cargado en la ventana. Esto es equivalente al edificio, el segundo piso no se ha construido, vaya directamente a cubrir 3 pisos, esto definitivamente no es así. Solo después de cargar la vista de ViewController;
Pitón
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self showAlertViewController];
}
- (void)showAlertViewController {
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Hello world" message:@"(*  ̄3)(ε ̄ *)d" preferredStyle:UIAlertControllerStyleAlert];
// Create the actions.
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"hello" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
NSLog(@"The /"Okay/Cancel/" alert''s cancel action occured.");
}];
UIAlertAction *otherAction = [UIAlertAction actionWithTitle:@"world" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
NSLog(@"The /"Okay/Cancel/" alert''s other action occured.");
}];
// Add the actions.
[alertController addAction:cancelAction];
[alertController addAction:otherAction];
UIWindow *windows = [[UIApplication sharedApplication].delegate window];
UIViewController *vc = windows.rootViewController;
[vc presentViewController:alertController animated: YES completion:nil];
}
Esto funcionó para mí.
Recibo una advertencia cuando intento presentar un ActivityController en el controlador de navegación,
Attempt to present <UIActivityViewController: 0x15be1d60> on <UINavigationController: 0x14608e80> whose view is not in the window hierarchy!
Intenté presentar el controlador de vista siguiendo el código,
UIActivityViewController * activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:applicationActivities];
activityController.excludedActivityTypes = excludeActivities;
UIViewController *vc = self.view.window.rootViewController;
[vc presentViewController: activityController animated: YES completion:nil];
[activityController setCompletionHandler:^(NSString *activityType, BOOL completed) {
NSLog(@"completed");
}];
¿Qué está mal aquí?
Enfrenté el problema similar en iPhone 6+.
En Swift 2.0
let obj = self.storyboard?.instantiateViewControllerWithIdentifier("navChatController") as! UINavigationController
obj.modalPresentationStyle = .FormSheet
obj.modalTransitionStyle = .CoverVertical
Constants.APPDELEGATE.window?.rootViewController?.presentViewController(obj, animated: false, completion: nil)
Lo solucioné de esta manera.
Está tratando de presentar un controlador de vista desde el controlador rootViewController
. En su caso, creo que el rootViewController
no es el ViewController actual. O bien presentó o presionó un nuevo UIViewController
encima. Debe presentar un controlador de vista desde el controlador de vista superior.
Necesitas cambiar:
UIViewController *vc = self.view.window.rootViewController;
[vc presentViewController: activityController animated: YES completion:nil];
a:
[self presentViewController: activityController animated: YES completion:nil];
Reemplazar línea:
UIViewController *vc = self.view.window.rootViewController;
[vc presentViewController: activityController animated: YES completion:nil];
//to
[self presentViewController:activityController animated: YES completion:nil];
o
[self.navigationController pushViewController:activityController animated:YES];