web-dev-qa-db-fra.com

EXCEPTION DE STORYBOARD - Storyboard ne contient pas de contrôleur de vue avec identifiant

Je développe actuellement une application iOS pour iPhone et iPad. J'essaie de montrer un NavigationController pour faire un module qui montre des fichiers. Sur un iPhone, cela fonctionne très bien, mais je ne parviens pas à le faire fonctionner sur iPad. 

Je reçois l'erreur suivante: 

'Storyboard (<UIStoryboard: 0x919b200>) doesn't contain a view controller with identifier 'FilesNavigation''

et voici le code: 

case 10: // Files
{
  UINavigationController *navigationController = [storyboard instantiateViewControllerWithIdentifier:@"FilesNavigation"];

  FilesViewController *filesViewController = [storyboard instantiateViewControllerWithIdentifier:@"Files"];

  [navigationController pushViewController:filesViewController animated:YES];

  self.slidingViewController.topViewController = navigationController;

  break;
}

Et dans mon storyboard, j'ai déjà défini l'ID de storyboard pour le contrôleur de navigation.

>##Custom Class 
>Class: UINavigationController
>##Identity
>Storyboard ID: FilesNavigation

J'ai utilisé ce code pour un autre cas sur le commutateur/bloc cas pour un autre module et cela fonctionne aussi pour iPad, c'est la première fois que j'ai cette erreur.

19
origds

Je l'ai compris, le problème était que le Storyboard ne se mettait pas à jour dans l'appareil.

  1. Désinstaller l'application du simulateur/iPhone/iPad
  2. Produit> Clean
  3. Construire et exécuter

Comme indiqué dans la réponse de @ T0m_Twt dans cette question

54
origds

Dans le volet de droite, dans la section de l'inspecteur d'identité, attribuez un ID de storyboard à votre contrôleur de navigation.

J'ai pris une capture d'écran pour vous

enter image description here

11
meda

Voici un autre cas:

Il y a deux storyboards localisés. Un seul d'entre eux possède le contrôleur de vue souhaité.

9
Nix Wang

Par chance, avez-vous un storyboard pour iPhone et un autre pour iPad? Si vous le faites, l’iPad n’a peut-être pas de story-board avec cet identifiant. De même, lorsque vous utilisez un iPad, définissez un point de rupture dans votre code et vérifiez ce qu'est votre objet "storyboard".

J'utilise une catégorie sur UIStoryboard qui me donnera les storyboards pour chaque plate-forme.

Je peux utiliser [UIStoryboard storyboardHome] et cela déterminera s'il a besoin d'un iPad ou d'un iPhone spécifique et me le retournera. Je m'assure également que mes story-boards suivent les noms appropriés. Donc, j'aurais Home_iPad et Home_iPhone.

1
Justin Holman

TL; DR - effacez tout et supprimez l'ancienne version de l'application, le cas échéant.

Cela peut sembler insensé, mais supposons que si vous avez également changé le nom de la cible qui a changé le nom de l'ensemble, l'ancienne version et la nouvelle version de l'application pourraient également être installées dans le simulateur/périphérique, ce qui pourrait causer des problèmes pour l'instance UIStoryboard en échec. pour instancier certains contrôleurs de vue, ce qui pourrait éventuellement causer le problème décrit dans la question. Pour le résoudre, vous devez supprimer toutes les applications associées ou simplement réinitialiser le simulateur/appareil.

0
superarts.org