iOS 7 - Standard-Ansichtscontroller konnte nicht instanziiert werden

93

Ich verwende Xcode 5 in einer neu erstellten App. Wenn ich sie nur erstelle, gehe ich auf die Schaltfläche "Ausführen" und klicke darauf. Dann wird das Projekt erstellt, aber es wird nicht im iOS-Simulator angezeigt und ich erhalte die folgende Meldung:

 Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - 
 perhaps the designated entry point is not set?

Ich habe natürlich darüber gegoogelt und alle weisen darauf hin, dass dies geschieht, da XCode noch nicht weiß, welcher View Controller der erste ist. Aber das Seltsame ist, dass ich die App als seitenbasierte App (auch als Einzelansicht und mit Registerkarten versehene App-Optionen ausprobiert) erstellt habe und XCode bereits ein Storyboard dafür definiert hatte.

Wenn ich zur Hauptschnittstellenoption des Projekts gehe, wird das Storyboard (von Xcode selbst "Main" genannt) festgelegt, und im Storyboard wird mein Ansichts-Controller als "Initial View Controller" festgelegt.

Geben Sie hier die Bildbeschreibung ein

Was ist falsch?

rodrigoalvesvieira
quelle
versuchen Sie es
programmgesteuert
@ Ramshad Hallo, ich bin ein Neuling in der iOS-Entwicklung. Wie kann ich das machen?
Rodrigoalvesvieira
2
Stellen Sie sicher, dass der Ansichts-Controller als anfänglicher Ansichts-Controller festgelegt ist.
Sandeep
Wie Kashif Ahmed betonte, müssen Sie auch Ihre Info.plist-Datei als Quellcode öffnen, die Zeichenfolge <key> UISceneStoryboardFile </ key> bearbeiten und dort den Namen Ihres neuen Storyboards angeben.
Bogdan

Antworten:

56

Das ist mir auch passiert. Ich habe 50 Mal nachgesehen und mein "Is Initial View Controller" wurde überprüft, glauben Sie mir. Es passierte aus heiterem Himmel. Wie habe ich das behoben?

  1. Erstellen Sie ein neues Storyboard in Ihrem Projekt und nennen Sie es Main_iPhoneV2 (oder iPadV2, abhängig von Ihrem ursprünglichen Storyboard-Stil).
  2. Öffnen Sie das kaputte Storyboard, klicken Sie auf eine beliebige Stelle im weißen Bereich und drücken Sie Befehl-a und dann Befehl-c (alle auswählen und kopieren).
  3. Öffnen Sie Ihr neues Storyboard und drücken Sie Befehlstaste-v, um genau das gleiche Setup einzufügen
  4. Gehen Sie zu Ihren Projekteinstellungen, ändern Sie Ihre "Hauptschnittstelle" in das neue Main_iPhoneV2 (Wenn es Ihr iPad ist und Sie eine universelle App schreiben, müssen Sie die -Info.plist bearbeiten und nach dem Wert "Main Storyboard-Datei" suchen Basisname (iPad)
  5. Kompilieren Sie neu und hören Sie auf, sich die Haare auszureißen
Ryna
quelle
3
Beim Ausführen der in den Entwicklergrundlagen aufgeführten Schritte ist dasselbe Problem aufgetreten. Erstellt ein neues Storyboard, markiert das neue als Controller für die Erstansicht und legt das neue Storyboard über die Projektbereitstellungsinformationen als Haupt-Storyboard fest. Es fing magisch an zu arbeiten. Ich bin mir nicht sicher, ob es einen Fehler mit Xcode gibt. developer.apple.com/library/ios/referencelibrary/GettingStarted/…
ioWint
Dies hat nicht funktioniert oder ich glaube, es wird nicht funktionieren, es sei denn und bis der anfängliche Navigationscontroller auf "ist Inital View Controller" eingestellt ist.
Sumit Kumar Saha
Ich wollte es versuchen. Aber dann habe ich gereinigt und wieder gebaut und es hat funktioniert
Skywalker
305

Aktivieren Sie im Attributinspektor die Option Ist Initial View Controller .

Geben Sie hier die Bildbeschreibung ein

Ashvin Ajadiya
quelle
Natürlich ist dies die Art und Weise, wie es funktionieren sollte. Aber ich bin auch auf den 'Bug' gestoßen, und dann funktioniert das nicht. Das Erstellen eines neuen und das Kopieren all Ihrer Inhalte hat funktioniert! in meinem Fall.
Tys
Aber sein View Controller ist bereits als Initial View Controller eingestellt, nicht wahr?
Iurii Vasylenko
@YuraVasylenko: Es war nicht vorher, also habe ich durch Markieren als ausgewählt angegeben.
Ashvin Ajadiya
1
Um es für diejenigen, die es benötigen, etwas detaillierter zu gestalten, stellen Sie den anfänglichen Controller für ein Storyboard ein
Sergei Basharov
40

Klicken Sie zuerst auf den View Controller in der rechten Leiste Dienstprogramme . Wählen Sie als Nächstes den Attributinspektor aus und stellen Sie sicher, dass im Abschnitt View Controller das Kontrollkästchen 'Is Initial View Controller' aktiviert ist!

Andy
quelle
1
Das war mein Problem. Ich habe den Standard-View-Controller gelöscht, über den mein Storyboard verfügt, und als ich einen anderen hinzufügte, musste ich dies überprüfen.
Orgmir
17

Diese Warnung wird auch gemeldet, wenn Sie folgenden Code haben:

    window = UIWindow(frame: UIScreen.mainScreen().bounds)
    window?.rootViewController = myAwesomeRootViewController
    window?.makeKeyAndVisible()

Wechseln Sie in diesem Fall zur ersten Seite der Zieleinstellungen und setzen Sie sie Main Interfaceauf leer, da Sie für Ihre App keinen Storyboard-Eintrag benötigen.

superarts.org
quelle
14

Verwenden des Interface Builder:

Überprüfen Sie, ob " Ist Erstansichts-Controller " eingestellt ist. Sie können es mit den folgenden Schritten einstellen:

  1. Wählen Sie Ihren View Controller (der als Einstiegsbildschirm angezeigt werden soll).
  2. Wählen Fenster " Dienstprogramme" die Attributinspektor" aus .
  3. Wählen Sie ' Ist Initial View Controller ' von View - Controller - Abschnitt (falls nicht).

Wenn Sie diesen Schritt ausgeführt haben und trotzdem Fehler erhalten uncheck and do it again.

Schritte zur Lösung des Problems

Programmgesteuert verwenden:

Ziel c :

        self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

        UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"HomeViewController"]; // <storyboard id>

        self.window.rootViewController = viewController;
        [self.window makeKeyAndVisible];

        return YES;

Swift:

        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

        var objMainViewController: MainViewController = mainStoryboard.instantiateViewControllerWithIdentifier("MainController") as! MainViewController

        self.window?.rootViewController = objMainViewController

        self.window?.makeKeyAndVisible()

        return true
Jayprakash Dubey
quelle
3
Wenn Sie dies programmgesteuert tun, müssen Sie Ihr Storyboard von der Hauptoberfläche Ihres Ziels entfernen - lassen Sie es einfach leer. Auch das sollte rein gehen didFinishLaunchingWithOptions.
Jordan H
@JordanH Wie entferne ich das Storyboard von der Hauptoberfläche des Ziels?
PascalS
@Passe Wählen Sie den Text und klicken Sie auf Löschen, es ist in der Registerkarte Allgemein
Jordan H
12

Ich habe festgestellt, dass mein Tab Bar Controller nicht zusammen mit einem schwarzen Bildschirm im Simulator angezeigt wird. Ich habe Folgendes getan, damit meine App im Simulator angezeigt wird.

  1. Gehen Sie zu Main.storyboard.
  2. Überprüfen Sie das Is Initial View Controllerunter der Registerkarte Attribute Inspector.

Ist Initial View Controller im Attributes Inspector.

Nachteile Bulaquena
quelle
10

Richten Sie das Fenster manuell ein.

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    if (!application.keyWindow.rootViewController) 
     {
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

        UIViewController *myViewController= [storyboard instantiateViewControllerWithIdentifier:@"myViewController identifier"];

         application.keyWindow.rootViewController = myViewController;
     }
}
Shamsudheen TK
quelle
Muss der anfängliche Viewcontroller im Storyboard deaktiviert werden?
BDV
7

Ich erhalte diese Fehlermeldung, wenn ich den Namen der Storyboard-Datei " Main.storyboard " in " XXX.storyboard " ändere.

Die Lösung für mich war:

  • Produkt-> Reinigen
  • ÄNDERUNG: Unterstützende Dateien -> info.plist -> Name der Basis-Storyboard- Dateibasis -> Haupt- TO: XXX

Viel Glück

Hovanes Mosoyan
quelle
3

Produkt "Clean" war die Lösung für mich.

Walter Schurter
quelle
3

Geben Sie hier die Bildbeschreibung ein

Stellen Sie neben der obigen richtigen Antwort auch sicher, dass Sie im Allgemeinen die richtige Hauptschnittstelle eingestellt haben.

Naren
quelle
3

1. Option

Wenn Sie Ihr benutzerdefiniertes Storyboard anstelle eines Standardansichts-Controllers festlegen möchten.

Ändern Sie dieses Attribut aus der Datei info.plist

<key>UISceneStoryboardFile</key> <string>Onboarding</string>

Onboarding wäre Ihr Storyboard-Name

Um diese zu öffnen, klicken Sie mit der rechten Maustaste auf die Datei info.plist und öffnen Sie sie als Quellcode

2. Option

1- Klicken Sie auf Ihr Projekt

2- Wählen Sie Ihr Projekt aus dem Zielbereich aus

3- Wechseln Sie zum Abschnitt " Bereitstellungsschnittstelle "

4- Ändern Sie Ihren Storyboard-Abschnitt im Feld Hauptschnittstelle

Bitte denken Sie daran, Ihren Storyboard-Controller für die Erstansicht einzustellen

Kashif Ahmed
quelle
1
Das <key> UISceneStoryboardFile </ key> -Ding hat es für mich behoben. Vielen Dank.
Bogdan
2

Wenn Sie ein neues Storyboard hinzugefügt haben, müssen Sie die folgenden Punkte überprüfen.

1) In Ihrer Plist-Datei sollte der Prüfwert des Basis- Storyboard- Dateibasisnamens (iPad) oder (iPhone) mit Ihrem Storyboard-Dateinamen übereinstimmen ( Erweiterung .storyboard nicht hinzufügen ).

2) Im Storyboard sollte es einen View Controller geben, der als Is initial view Controller festgelegt ist

3) Reinigen und erstellen Sie Ihr Projekt. :) :)

Geben Sie hier die Bildbeschreibung ein

Sachin Nikumbh
quelle
1

Wenn Sie Ihren Code regelmäßig zur Quellcodeverwaltung verpflichtet haben, können Sie sich den Aufwand ersparen, ein neues Storyboard zu erstellen und möglicherweise weitere Probleme zu verursachen ...

Ich konnte dies lösen, indem ich den Git-Quellcode der Version verglich, die gegen den kaputten funktionierte. Der Unterschied zeigte, dass die erste Zeile die ID des anfänglichen Ansichtscontrollers enthalten sollte, in meinem Fall initialViewController = "Q7U-eo-vxw" . Ich habe den Quellcode durchsucht, um sicherzugehen, dass die ID vorhanden ist. Alles was ich tun musste war es zurückzusetzen und alles funktionierte wieder!

<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="5056" systemVersion="13E28" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" initialViewController="Q7U-eo-vxw">
    <dependencies>
        <deployment defaultVersion="1296" identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/>
    </dependencies>
    <scenes>

Hier sind einige Schritte, die Ihnen bei der Fehlerbehebung helfen können:

  1. Klicken Sie mit der rechten Maustaste auf das fehlerhafte Storyboard und verwenden Sie Quellcodeverwaltung> Festschreiben ..., um Ihre Änderungen seit dem letzten Festschreiben beizubehalten.
  2. Versuchen Sie, mit der rechten Maustaste auf Ihr fehlerhaftes Storyboard zu klicken, und verwenden Sie "Öffnen als> Quellcode", um das XML des Storyboards anzuzeigen.
  3. Suchen Sie im Dokumentelement nach dem Attribut " initialViewController ". Wenn es fehlt, machen Sie sich keine Sorgen, wir werden das beheben. Wenn es dort ist, doppelklicken Sie auf die ihm zugewiesene ID, Befehl-c, um es zu kopieren, Befehl-f, Befehl-v, um tiefer im Dokument danach zu suchen. Dies ist die Kennung des Controllers, der die erste Ansicht bereitstellen soll. Wenn es im Dokument nicht definiert ist, ist dies ein Problem. Sie sollten es aus dem Dokument-Tag entfernen, in meinem Fall initialViewController = "Q7U-eo-vxw" .
  4. Gehen Sie zum Xcode-Menüpunkt Ansicht und wählen Sie Versionseditor> Vergleichsansicht anzeigen
  5. Dies zeigt links Ihre lokale Version und rechts die historische Version. Klicken Sie auf das Datum unter der historischen Version, um eine Liste der Commits für dieses Storyboard zu erhalten. Wählen Sie eine aus, von der Sie wissen, dass sie funktioniert, und vergleichen Sie das Dokumentelement . Wie lautet die ID des * initialViewController ? Ist es anders Wenn ja, versuchen Sie, es wieder von Hand zu bearbeiten und auszuführen. xcode historisches Vergleichstool in Aktion
neoscribe
quelle
1

Überprüfen Sie, ob Sie das Fenster var im AppDelegate haben.

var window: UIWindow? 

Überprüfen Sie auch das Storyboard Ihrer Info.plist-Datei.

<key>UIMainStoryboardFile</key>
<string>Main</string>

Durch das programmgesteuerte Festlegen des rootViewControllers im AppDelegate wird die Warnung nicht behoben. Sie sollten wählen, ob Sie den View Controller für das Storyboard festlegen oder programmgesteuert ausführen möchten.

rockdaswift
quelle
1

Projekte, die in Xcode 11 und höher erstellt wurden, reichen nicht aus, nur die Hauptschnittstellendatei aus den Projekteinstellungen zu ändern.

Sie müssen die Datei Info.plist manuell bearbeiten und auch den Storyboard-Namen für festlegen UISceneStoryboardFile.

Isuru
quelle