web-dev-qa-db-fra.com

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

Je continue à avoir l'erreur suivante:

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

C'est le code:

- (void)tableView:(UITableView *)tableView 
        didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

   UIViewController *controller =  [self.storyboard instantiateViewControllerWithIdentifier:@"drivingDetails"];
   controller.title = [[dao libraryItemAtIndex:indexPath.row] valueForKey:@"name"];
   [self.navigationController pushViewController:controller animated:YES];
}

J'ai déjà défini la identifier sur la UIStoryboard mais je reçois toujours cette erreur.

enter image description here


168
mat

Fixé! Non seulement l'identifiant dans la séquence doit être défini, dans mon cas DrivingDetails, mais également l'identifiant dans mon tableViewController doit être défini comme DrivingDetails ... regardez ma photo:

enter image description here

J'ai également supprimé le contrôleur de vue de navigation afin que maintenant les 2 contrôleurs de vue de table soient connectés directement avec une animation "Push".

***** EDIT pour XCODE 7.0 *****

vous devez définir le storyboardId (dans ce cas, le viewController est incorporé dans un contrôleur de navigation:

let lastMinVc  = mainStoryBoard.instantiateViewControllerWithIdentifier("lastMinuteNavController") as! UINavigationController

enter image description here

41
mat

Juste pour référence future:

Je développe sur iOS 6 à l'aide de Storyboards.

J'avais le même problème, mais je n'ai pas trouvé le champ "Identifiant" dans l'inspecteur. A la place, définissez simplement le champ nommé "ID Storyboard" sur le nom que vous donneriez à l'identifiant. Ce champ se trouve sous l'onglet "Afficher l'inspecteur d'identité" dans l'inspecteur.

[Remarque - les commentaires ci-dessous indiquent que certaines personnes ont jugé nécessaire de définir (également?) Le champ "ID de restauration" juste en dessous de l'ID de Storyboard dans l'inspecteur. Cliquer sur "Utiliser l'ID du storyboard" ne semble pas être suffisant.]

Il y a une image ci-dessous pour référence: (dans cet exemple, j'ai nommé mon identifiant de la même façon que ma classe) enter image description here

239
khaliq

Dans XCODE 7 | 8 | 9,

lorsque vous modifiez les identifiants de storyboard et que vous obtenez des erreurs comme celle-ci,

juste CLEAN votre projet (CMD + SHIFT + K)

183
Ted

Parfois, il y a une confusion entre les termes.

// Swift 4
let storyboard = UIStoryboard(name: "StoryboardFileName", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "StoryboardID")
self.present(controller, animated: true, completion: nil)

Notez que "StoryboardFileName" est le nom de fichier du storyboard et non l'ID ici, où "StoryboardID" est en réalité l'ID que vous avez. défini manuellement dans l'inspecteur d'identité. Parfois, les gens sont confus quant à la différence entre les deux, où ils croient que le premier est en réalité le StoryboardID et le second un nom de classe ViewController.

Storyboard ID

J'ai constaté une certaine confusion autour de cela, alors j'ai pensé à poster dans cette question qui attire de nombreux nouveaux programmeurs dans Swift avec un problème similaire.

17
Rafael

Identité située dans l'onglet Inspecteur d'identité nommé Storyboard ID pour Xcode 6.3.2 et coché l'option Use Storyboard ID. enter image description here

14
BeyazBaron

Je viens d'avoir ce problème après avoir ajouté un nouveau VC au storyboard, mais uniquement sur l'appareil, pas sur le simulateur. Il s'avère que cela était dû à plusieurs localisations de storyboard - le VC n'a été ajouté qu'à celui-ci. J'ai essayé de supprimer les autres localisations (l'une d'elles est celle utilisée par mon iPhone) mais j'avais toujours l'erreur. Finalement, j'ai dû recréer les autres localisations avec le nouveau VC dans chacune d'entre elles.

9
Hari Karam Singh

Pour ceux qui ont le même problème que @Ravi Bhanushali, voici une solution Swift 4:

let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)

4
confitz20

Je l'ai trouvé ... cliquez sur le contrôleur de vue dans le storyboard, cliquez sur la troisième icône en partant de la gauche sur les inspecteurs d'attributs vc - celui où vous définissez le nom de l'appel sur cet écran indiquant "identité" - le mien était caché, je devais le faire Cliquez sur l'identité du mot pour afficher le storyboardID - ajoutez l'identifiant à partir du code, c'est fait

4
Jon

Le compilateur affiche l'erreur suivante:

Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: 'Storyboard (<UIStoryboard: 0x7fedf2d5c9a0>) doesn't contain a 
ViewController with identifier 'SBAddEmployeeVC''

Ici, l'objet du storyboard créé n'est pas le storyboard principal qui contient nos ViewControllers. Comme fichier de storyboard sur lequel nous travaillons est nommé Main.storyboard. Nous avons donc besoin d’une référence d’objet de Main.storyboard.

Utilisez le code suivant pour cela:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];

Ici storyboardWithName est le nom du fichier de storyboard avec lequel nous travaillons et bundle spécifie le paquet dans lequel se trouve notre storyboard (c'est-à-dire mainBundle).

4
Ravi Bhanushali

La modification de "Storyboard ID" dans l'inspecteur d'identité (la 3ème icône à gauche) devrait fonctionner.

Si ce n'est pas le cas et que vous êtes sûr qu'il n'y a pas de faute de frappe, essayez de nettoyer le projet ("Produit" -> "Nettoyer" ou simplement commande + décalage + K).

4
aychen0110

Quelques-uns de mes contrôleurs de vue manquaient l'attribut storyboardIdentifier .

Avant:

<viewController
    id="pka-il-u5E"
    customClass="YourViewControllerName"
    customModule="ModuleName"
    customModuleProvider="target"
    sceneMemberID="viewController">

Après:

<viewController
    storyboardIdentifier="YourViewControllerName"   <----
    id="pka-il-u5E"
    customClass="YourViewControllerName"
    customModule="ModuleName"
    customModuleProvider="target"
    sceneMemberID="viewController">
1
Andy

Nettoyer toutes les choses et fermer Xcode ne résout pas le problème pour moi.

Je devais supprimer le viewController et en créer un nouveau avec un nouvel identifiant.

0
user3722523

il est très simple de sélectionner le contrôleur de vue respectif dans le story-board principal et de vérifier le storyboardID si son utilisation actuelle l’identifie dans l’identificateur de donner un nom et l’utiliser.

ici mon premier est le storyboardID laisser vc = self.storyboard? .instantiateViewController (withIdentifier: "firstone") en tant que! tabBarViewController

0
Saba Zehra

Utilisez votre identifiant (@ "drivingDetails") comme identifiant de storyboard.

0
Priyam

Lors de la saisie de l'identifiant, vous n'avez pas sélectionné le bon contrôleur de vue, vérifiez une fois si c'est fait et répétez la procédure une fois de plus.

0
iamsult

J'ai la même erreur et je pourrais résoudre ce problème en modifiant les modifications suivantes dans mon projet. J'ai mentionné le nom de ma classe dans le panneau de l'inspecteur, puis le problème est résolu. Goto-> right panel there Inspecteur d'identité Dans la section des classes personnalisées

classe: le nom de votre classe (ViewController)

Dans l'ID de storyboard de la section Identité: votre ID de storyboard (nom du viewController)

Après cela, cliquez sur l'option Utiliser l'ID du storyboard ci-dessous. Le problème est donc résolu. J'espère que cela vous aidera ....

0

J'ai essayé toutes les solutions ci-dessus et aucune n'a fonctionné.

Ce que j'ai fait était:

  • Projet propre
  • Supprimer les données dérivées
  • Redémarrer Xcode
  • Entrez à nouveau le StoryboardID indiqué dans les réponses précédentes (à l'intérieur de l'IB).

Et puis ça a marché. La chose choquante était que j'avais entré l'ID Storyboar dans le constructeur d'interface et qu'il avait été supprimé/supprimé après avoir rouvert Xcode.

J'espère que ça aide quelqu'un.

0
Darkwonder