You will need to get the root view controller and perform a segue from that view controller. This can be quite frustrating to debug but there are some answers on here about this topic.
Here is some code that I have used to perform a segue from the root view controller to a screen when the app receives a push notification.
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"YourStoryboard" bundle:nil];
YourViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"viewcontrolleridentifier"];
UIViewController *top = [UIApplication sharedApplication].keyWindow.rootViewController;
[top presentViewController:viewController animated:YES completion: nil];
Heres the same code in swift:
let storyboard = UIStoryboard.init(name: "YourStoryboard", bundle: nil)
let viewController = storyboard.instantiateViewController(withIdentifier: "viewcontrolleridentifier")
let top = UIApplication.shared.keyWindow?.rootViewController
top?.present(viewController, animated: true, completion: nil)
Make sure you set the view controllers identifier in your storyboard.
EDIT* If the view controller you are accessing is embedded within a navigation controller you will need to amend the above code,
Objective C:
UIViewController *top = [self topMostController];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
[top presentViewController:navigationController animated:YES completion: nil];
Swift:
let top = UIApplication.shared.keyWindow?.rootViewController
let navigationController = UINavigationController.init(rootViewController: viewController)
top?.present(navigationController, animated: true, completion: nil)