By the way, I know that you solved the problem, but I just wanted to offer a different thread. You can, alternatively, always start with your standard start scene (which you can bypass without code in the application delegate), but have viewWillAppear determine if you need terms and conditions (T & C), and if so, Imagine a separate scene modally (animated or not animated as you see fit). You may have a T & C user confirmation, and then release the conditions scene and you will be returned to the standard “start” scene.
If you do this, your T&C will be rejected, you won’t have to play with programmatically changing the rootViewController , the top-level scene of the navigation controller always remains as the standard “initial” because things like popToRootViewController work without any manipulation, you no need to hide the navigation bar on the T&C page, etc. It also lends itself to a stream where you can present the user with the opportunity to see T&C again (for example, they are buried in the “settings” or “near” scenarios if you have a suitable place to display it).
And if you are wondering how to programmatically switch to T & C, you can define a segue from your initial scene to the T & C scene:

Then select this segment and give it an identifier:

And now your initial viewWillAppear scene could performSegueWithIdentifier , for example:
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; BOOL hasAcceptedTermsAndConditions = ...; if (!hasAcceptedTermsAndConditions) { [self performSegueWithIdentifier:@"TermsAndConditions" sender:self]; } }
I'm glad you solved your problem, but I just wanted to offer an alternative thread.
source share