Je suis en train de créer une application. Quand il est lancé pour la première fois, il demande à l'utilisateur de faire deux choses:
De là, il va au contrôleur de vue d'accueil.
Le problème auquel je suis actuellement confronté est de pousser le premier contrôleur de vue sur l'écran de mon délégué d'application. J'utilise des storyboards/Xcode 5/iOS7
Voici le code que je suis venu avec:
UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle: nil];
BBCounterySettingsViewController *controller = (BBCounterySettingsViewController*)[mainStoryboard instantiateViewControllerWithIdentifier: @"CountrySettings"];
[navigationController pushViewController:controller animated:NO];
Le problème est que l'application se bloque lorsqu'elle frappe la dernière ligne de code avec l'erreur suivante:
* Arrêt de l'application en raison d'une exception non interceptée 'NSInvalidArgumentException', raison: '- [UIViewController pushViewController: animated:]: sélecteur non reconnu envoyé à l'instance 0x8e9a400 '
Quelqu'un a une idée de ce que je fais mal?
Vous vous attendez à ce que self.window.rootViewController
soit une UINavigationController
mais c'est une UIViewController
. Cela signifie que le contrôleur de vue le plus à l'extérieur de votre scénario est d'un type incorrect.
Un meilleur moyen d’obtenir la UINavigationController
(ce qui devrait fonctionner dans ce cas) consiste à utiliser la propriété self.navigationController
sur toute UIViewController
.
D'après ce que j'ai compris, vous voulez présenter une vue lors de la première utilisation, pour que l'utilisateur sélectionne des éléments. Ce que vous devriez alors faire est de présenter un contrôleur de vue modal, comme ceci:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//isFirstRun is some boolean you use to determine if it's the first run
if(isFirstRun){
BBCounterySettingsViewController *controller = (BBCounterySettingsViewController *)[mainStoryboard instantiateViewControllerWithIdentifier: @"CountrySettings"];
[self.window.rootViewController presentViewController: controller animated:YES completion:nil];
}
Vous devez faire deux choses:
Ensuite, vous avez utilisateur la ligne ci-dessous
loginView = [storyboard instantiateViewControllerWithIdentifier:@"LoginView"];
[(UINavigationController*)self.window.rootViewController pushViewController:loginView animated:NO];
J'espère que cela t'aides. Faites-moi savoir si vous avez toujours le problème.
[self performSegueWithIdentifier:@"buyListSegue" sender:sender];
Je pense que l'identifiant du contrôleur "CountrySettings"
est défini sur le mauvais contrôleur. Vous n'obtenez pas de NavigationController
où vous pouvez appeler pushViewController
...