it-swarm.com.de

STORYBOARD - enthält keinen View Controller mit Identifier

Ich erhalte immer wieder den folgenden Fehler:

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

Dies ist der 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];
}

Ich habe identifier bereits auf UIStoryboard gesetzt, erhalte aber immer noch diesen Fehler.

enter image description here


168
mat

Fest! Es muss nicht nur der Bezeichner im Segue gesetzt sein, in meinem Fall DrivingDetails, sondern auch der Bezeichner in meinem tableViewController muss als DrivingDetails gesetzt sein ... check my picture:

enter image description here

Ich habe auch den Navigationsansicht-Controller entfernt, sodass jetzt die beiden Tabellenansicht-Controller direkt mit einer "Push" -Animation verbunden sind.

***** EDIT für XCODE 7.0 *****

sie müssen die storyboardId setzen (in diesem Fall ist der viewController in einen Navigationscontroller eingebettet:

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

enter image description here

41
mat

Nur zum späteren Nachschlagen:

Ich entwickle auf iOS 6 mit Storyboards.

Ich hatte das gleiche Problem, konnte jedoch das Feld "Kennung" im Inspektor nicht finden. Setzen Sie stattdessen einfach das Feld "Storyboard-ID" auf den Namen des Bezeichners. Dieses Feld befindet sich im Inspektor auf der Registerkarte "Identitätsinspektor anzeigen".

[Hinweis - Die folgenden Kommentare weisen darauf hin, dass einige Personen festgestellt haben, dass sie (auch?) Das Feld "Wiederherstellungs-ID" direkt unter der Storyboard-ID im Inspektor festlegen müssen. Ein Klick auf "Storyboard-ID verwenden" scheint nicht ausreichend zu sein.]

Es gibt ein Bild unten als Referenz: (In diesem Fall habe ich meinen Bezeichner genauso benannt wie meine Klasse) enter image description here

239
khaliq

In XCODE 7 | 8 | 9,

wenn Sie die Storyboard-IDs ändern und solche Fehler erhalten,

nur BEREINIGEN Ihr Projekt (CMD + UMSCHALT + K)

183
Ted

Manchmal gibt es eine Verwechslung zwischen den Begriffen.

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

Beachten Sie, dass "StoryboardFileName" Der Dateiname des Storyboards und hier nicht die ID ist, wobei "StoryboardID" Tatsächlich die ID ist Sie haben im Identitätsinspektor manuell festgelegt. Manchmal sind die Leute verwirrt über den Unterschied zwischen den beiden, wo sie glauben, dass der erste tatsächlich die StoryboardID und der zweite ein ViewController-Klassenname ist.

Storyboard ID

Ich habe diesbezüglich einige Verwirrung gesehen, weshalb ich darüber nachgedacht habe, diese Frage zu stellen, die viele neue Programmierer in Swift mit einem ähnlichen Problem anzieht.

17
Rafael

Die Identität befindet sich auf der Registerkarte "Identitätsinspektor" mit dem Namen "Storyboard-ID für Xcode 6.3.2" und ist mit der Option "Storyboard-ID verwenden" markiert. enter image description here

14
BeyazBaron

Hatte gerade dieses Problem, nachdem ein neues VC zum Storyboard hinzugefügt wurde, aber nur auf dem Gerät, nicht auf dem Simulator. Es stellte sich heraus, dass mehrere Lokalisierungen des Storyboards vorhanden waren - das VC) $ === wurde nur zu der primären Lokalisierung hinzugefügt. Ich habe versucht, die anderen Lokalisierungen zu entfernen (von denen eine diejenige ist, die mein iPhone verwendet), hatte aber immer noch den Fehler. Am Ende musste ich die anderen Lokalisierungen neu erstellen mit das neue VC in jedem von ihnen.

9

Für diejenigen mit dem gleichen Problem wie @Ravi Bhanushali ist hier eine Swift 4 Lösung:

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

4
confitz20

Ich habe es gefunden ... klicke auf den View Controller im Storyboard, klicke auf das dritte Symbol von links in den Inspektoren für VC-Attribute - das, in dem du den Namen des Anrufs auf dem Bildschirm mit der Aufschrift "Identität" festgelegt hast - meiner war versteckt, das musste ich Klicken Sie auf die Word-Identität, dann wird die Storyboard-ID angezeigt - fügen Sie den Bezeichner aus dem Code hinzu, fertig

4
Jon

Compiler zeigt folgenden Fehler an:

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

Hier ist das Objekt des erstellten Storyboards nicht das Haupt-Storyboard, das unsere ViewController enthält. As Storyboard-Datei, an dem wir arbeiten, heißt Main.storyboard. Wir brauchen also einen Verweis auf das Objekt des Main.storyboard.

Verwenden Sie dazu folgenden Code:

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

Hier ist storyboardWithName der Name der Storyboard-Datei, mit der wir arbeiten, und bundle gibt das Bündel an, in dem sich unser Storyboard befindet (d. H. mainBundle).

4
Ravi Bhanushali

Das Ändern der "Storyboard-ID" im Identitätsinspektor (das dritte Symbol links) sollte funktionieren.

Wenn dies nicht der Fall ist und Sie sicher sind, dass kein Tippfehler vorliegt, versuchen Sie, das Projekt zu bereinigen ("Produkt" -> "Bereinigen" oder einfach Befehl + Umschalt + K).

4
aychen0110

Einigen meiner Ansichtscontroller fehlte das Attribut storyboardIdentifier .

Vor:

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

Nach:

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

Das Bereinigen aller Dinge und das Schließen von Xcode hat das Problem für mich nicht gelöst.

Ich musste den viewController löschen und einen neuen mit neuer Kennung erstellen.

0
user3722523

es ist sehr einfach, den entsprechenden View-Controller im Haupt-Storyboard auszuwählen und die Storyboard-ID zu überprüfen, wenn sie gegenwärtig verwendet wird. Geben Sie einen Namen ein und verwenden Sie sie.

hier ist mein firstone die storyboardID lass vc = self.storyboard? .instantiateViewController (withIdentifier: "firstone") als! tabBarViewController

0
Saba Zehra

XCODE DRAG N DROP PANE IS GONE !!!

enter image description hereenter image description here

0
Mr Heelis

Verwenden Sie Ihre ID (@ "drivingDetails") als Storyboard-ID.

0
Priyam

Überprüfen Sie bei der Eingabe der Kennung, ob Sie nicht den richtigen View-Controller ausgewählt haben, einmal, und wiederholen Sie den Vorgang noch einmal.

0
iamsult

Ich habe den gleichen Fehler erhalten und konnte ihn beheben, indem ich die folgenden Änderungen in meinem Projekt vorgenommen habe. Ich habe meinen Klassennamen im Inspector Panel erwähnt, dann ist das Problem gelöst. Goto-> right panel there Identity Inspector Im Abschnitt für benutzerdefinierte Klassen

klasse: Ihr Klassenname (ViewController)

Im Abschnitt Identität Storyboard-ID: Ihre Storyboard-ID (viewController-Name)

Klicken Sie anschließend dort auf die Option Storyboard-ID verwenden. Damit ist das Problem behoben. Ich hoffe es hilft dir....

Ich habe alle oben genannten Lösungen ausprobiert und keine hat funktioniert.

Was ich getan habe war:

  • Projekt sauber
  • Abgeleitete Daten löschen
  • Starten Sie Xcode neu
  • Geben Sie die in den vorherigen Antworten gezeigte StoryboardID erneut ein (in IB).

Und dann hat es geklappt. Das Schockierende war, dass ich die Storyboar-ID im Interface Builder eingegeben hatte und sie nach dem erneuten Öffnen von Xcode entfernt/gelöscht wurde.

Hoffe das hilft jemandem.

0
Darkwonder