I am getting following warning when I try to present a ActivityController on navigation controller,
当我试图在导航控制器上显示一个ActivityController时,
Attempt to present <UIActivityViewController: 0x15be1d60> on <UINavigationController: 0x14608e80> whose view is not in the window hierarchy!
I have tried to present view controller by following 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");
}];
Whats going wrong here ?
这里出什么问题了?
4 个解决方案
#1
33
You are trying to present a view controller from the rootViewController
. In your case I think the rootViewController
is not the current ViewController. Either you presented or pushed a new UIViewController
on top of it. You should present a view controller from the top most view controller itself.
您正在尝试从rootViewController中显示一个视图控制器。在你的例子中,我认为rootViewController不是当前的ViewController。你可以在上面展示或推送一个新的UIViewController。您应该从最上面的视图控制器本身显示一个视图控制器。
You need to change:
您需要更改:
UIViewController *vc = self.view.window.rootViewController;
[vc presentViewController: activityController animated: YES completion:nil];
to:
:
[self presentViewController: activityController animated: YES completion:nil];
#2
6
Analysis: Because the present modal view ViewController class has not been loaded into the window. This is equivalent to the building, second floor haven't built, directly go to cover 3 floor, this is definitely not. Only after load ViewController's view ;
分析:因为当前模态视图ViewController类没有被加载到窗口。这相当于大楼,二楼还没盖,直接去盖三层,这绝对不是。只在加载ViewController的视图之后;
Python
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];
}
This's worked for me.
这是为我工作。
#3
3
Replace line:
取代线:
UIViewController *vc = self.view.window.rootViewController;
[vc presentViewController: activityController animated: YES completion:nil];
//to
[self presentViewController:activityController animated: YES completion:nil];
or
或
[self.navigationController pushViewController:activityController animated:YES];
#4
-6
I faced the similar issue in iPhone 6+.
我在iPhone 6+中遇到了类似的问题。
In Swift 2.0
在斯威夫特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)
I solved it by this way.
我用这种方法解出来了。
#1
33
You are trying to present a view controller from the rootViewController
. In your case I think the rootViewController
is not the current ViewController. Either you presented or pushed a new UIViewController
on top of it. You should present a view controller from the top most view controller itself.
您正在尝试从rootViewController中显示一个视图控制器。在你的例子中,我认为rootViewController不是当前的ViewController。你可以在上面展示或推送一个新的UIViewController。您应该从最上面的视图控制器本身显示一个视图控制器。
You need to change:
您需要更改:
UIViewController *vc = self.view.window.rootViewController;
[vc presentViewController: activityController animated: YES completion:nil];
to:
:
[self presentViewController: activityController animated: YES completion:nil];
#2
6
Analysis: Because the present modal view ViewController class has not been loaded into the window. This is equivalent to the building, second floor haven't built, directly go to cover 3 floor, this is definitely not. Only after load ViewController's view ;
分析:因为当前模态视图ViewController类没有被加载到窗口。这相当于大楼,二楼还没盖,直接去盖三层,这绝对不是。只在加载ViewController的视图之后;
Python
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];
}
This's worked for me.
这是为我工作。
#3
3
Replace line:
取代线:
UIViewController *vc = self.view.window.rootViewController;
[vc presentViewController: activityController animated: YES completion:nil];
//to
[self presentViewController:activityController animated: YES completion:nil];
or
或
[self.navigationController pushViewController:activityController animated:YES];
#4
-6
I faced the similar issue in iPhone 6+.
我在iPhone 6+中遇到了类似的问题。
In Swift 2.0
在斯威夫特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)
I solved it by this way.
我用这种方法解出来了。