Je reçois un avertissement lorsque je tente de présenter un ActivityController sur le contrôleur de navigation,
Attempt to present <UIActivityViewController: 0x15be1d60> on <UINavigationController: 0x14608e80> whose view is not in the window hierarchy!
J'ai essayé de présenter le contrôleur de vue en suivant le code,
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-ce qui ne va pas ici?
Vous essayez de présenter un contrôleur de vue à partir de rootViewController
. Dans votre cas, je pense que le rootViewController
n'est pas le ViewController actuel. Vous avez présenté ou ajouté un nouveau UIViewController
. Vous devez présenter un contrôleur de vue à partir du contrôleur de vue le plus élevé.
Vous devez changer:
UIViewController *vc = self.view.window.rootViewController;
[vc presentViewController: activityController animated: YES completion:nil];
à:
[self presentViewController: activityController animated: YES completion:nil];
Analyse: La classe ViewController de la vue modale actuelle n’a pas été chargée dans la fenêtre. Ceci est équivalent au bâtiment, le deuxième étage n’a pas été construit, allez directement sur 3 étages, ce n’est certainement pas le cas. Seulement après avoir chargé la vue de ViewController;
Python
- (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];
}
Cela a fonctionné pour moi.
Remplacer la ligne:
UIViewController *vc = self.view.window.rootViewController;
[vc presentViewController: activityController animated: YES completion:nil];
//to
[self presentViewController:activityController animated: YES completion:nil];
ou
[self.navigationController pushViewController:activityController animated:YES];