iOS 7 - Impossibile istanziare il controller di visualizzazione predefinito


93

Sto usando Xcode 5 in un'app appena creata e quando lo creo scelgo il pulsante Esegui e faccio clic su di esso, quindi il progetto viene creato ma non viene visualizzato nel simulatore iOS e ricevo il seguente messaggio:

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

Ovviamente ho cercato su Google e tutti fanno notare che questo sta accadendo perché XCode non sa ancora quale controller di visualizzazione è quello iniziale. Ma la cosa strana è che ho creato l'app come un'app basata su una pagina (ho provato anche le opzioni dell'app a visualizzazione singola e a schede) e XCode aveva già definito uno Storyboard per essa.

Inoltre, quando accedo all'opzione dell'interfaccia principale del progetto viene impostato lo storyboard (denominato "Main" dallo stesso Xcode) e nello Storyboard, il mio controller di visualizzazione è impostato come "Controller di visualizzazione iniziale"

inserisci qui la descrizione dell'immagine

Che c'è?


prova a impostarlo in modo programmatico ...
Shamsudheen TK

@Ramshad Ciao, sono una specie di novellino nello sviluppo di iOS. Come lo posso fare?
rodrigoalvesvieira


2
Assicurati di impostare il controller di visualizzazione come controller di visualizzazione iniziale.
Sandeep

Come ha sottolineato Kashif Ahmed, devi anche aprire il tuo file Info.plist come codice sorgente e modificare la stringa <key> UISceneStoryboardFile </key> e fornire lì il nome del tuo nuovo storyboard.
bogdan

Risposte:


56

Quindi è successo anche a me. Ho controllato 50 volte e il mio "Is Initial View Controller" è stato controllato, credimi. È successo di punto in bianco. Allora come l'ho risolto?

  1. Crea un nuovo Storyboard nel tuo progetto, chiamalo come Main_iPhoneV2 (o iPadV2 a seconda dello stile originale dello storyboard)
  2. Apri lo storyboard rotto, fai clic in un punto qualsiasi dell'area bianca e premi comando-a, quindi comando-c (seleziona tutto e copia)
  3. Apri il tuo nuovo storyboard e premi comando-v per incollare la stessa configurazione esatta
  4. Vai alle impostazioni del tuo progetto, cambia la tua "Interfaccia principale" nel nuovo Main_iPhoneV2 (se è il tuo iPad e stai scrivendo un'app universale, dovrai modificare -Info.plist e cercare il valore "File dello storyboard principale nome di base (iPad)
  5. Ricompila e smetti di strapparti i capelli

3
ha riscontrato lo stesso problema durante il tentativo di eseguire i passaggi elencati nelle nozioni di base per sviluppatori. Creato un nuovo Storyboard, contrassegna il nuovo come controller di visualizzazione iniziale e imposta quello nuovo come Storyboard principale tramite le informazioni sulla distribuzione dei progetti. Magicamente ha iniziato a funzionare. Non sono sicuro che si tratti di un bug con Xcode. developer.apple.com/library/ios/referencelibrary/GettingStarted/…
ioWint

Questo non ha funzionato o credo che non funzionerà, a meno che e fino a quando il controller di navigazione iniziale non è impostato come "è Inital View Controller".
Sumit Kumar Saha

Stavo per provare questo. Ma poi ho pulito e costruito di nuovo e ha funzionato
Skywalker

305

Selezionare Is Initial View Controller nell'Inspector degli attributi.

inserisci qui la descrizione dell'immagine


Ovviamente questo è "il modo in cui dovrebbe funzionare". Ma ho riscontrato anche il "bug" e quindi non funziona. Crearne uno nuovo e copiare tutte le tue cose ha funzionato! nel mio caso.
Tys

Ma il suo controller di visualizzazione è già impostato come Controller di visualizzazione iniziale, non è vero?
Iurii Vasylenko

@ YuraVasylenko: Non era prima, quindi ho indicato con il segno come selezionato.
Ashvin Ajadiya

1
Solo per renderlo un po 'più dettagliato per chi ne ha bisogno, Impostazione del controller iniziale per uno storyboard
Sergei Basharov

40

Per prima cosa fare clic sul controller di visualizzazione nella barra delle utilità a destra . Quindi seleziona l' ispettore degli attributi e assicurati che nella sezione Controller di visualizzazione la casella di controllo "Is Initial View Controller" sia selezionata!


1
Questo era il mio problema. Ho eliminato il controller di visualizzazione predefinito che aveva il mio storyboard e quando ne ho aggiunto un altro ho dovuto controllarlo.
Orgmir

17

Questo avviso viene segnalato anche se hai un codice come:

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

In questo caso, vai alla prima pagina delle impostazioni di destinazione e impostalo Main Interfacesu vuoto, poiché non hai bisogno di una voce dello storyboard per la tua app.


14

Utilizzando Interface Builder:

Controlla se " Is initial view controller " è impostato. Puoi impostarlo utilizzando i passaggi seguenti:

  1. Seleziona il tuo controller di visualizzazione (che deve essere visualizzato come schermata iniziale).
  2. Seleziona l' ispettore degli attributi dalla finestra Utilità .
  3. Seleziona " Is Initial View Controller " dalla sezione View Controller (in caso contrario).

Se hai eseguito questo passaggio e continui a ricevere l'errore, allora uncheck and do it again.

Passaggi per risolvere il problema

Utilizzo a livello di codice:

Obiettivo-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

3
Se lo fai in modo programmatico, assicurati di rimuovere lo storyboard dall'interfaccia principale del tuo obiettivo: lascialo vuoto. Anche questo dovrebbe entrare didFinishLaunchingWithOptions.
Jordan H

@JordanH come rimuovere lo storyboard dall'interfaccia principale degli obiettivi?
PascalS

@Passe Seleziona il testo e premi Elimina, si trova nella scheda Generale
Jordan H

12

L'ho sperimentato con il mio controller della barra delle schede che non appare nel simulatore insieme a uno schermo nero. Ho fatto quanto segue per far apparire la mia app nel simulatore.

  1. Vai a Main.storyboard.
  2. Controlla Is Initial View Controllersotto la scheda Inspector Attributi.

È Initial View Controller nell'Inspector Attributi.


10

Imposta la finestra manualmente,

- (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;
     }
}

Ciò richiede di deselezionare il viewcontroller iniziale nello storyboard?
bdv

7

Ricevo questo errore quando cambio il nome del file dello storyboard " Main.storyboard " IN: " XXX.storyboard "

La soluzione per me era:

  • Prodotto-> Pulito
  • CAMBIA: File di supporto -> info.plist -> Nome base del file storyboard principale -> principale TO: XXX

In bocca al lupo



3

inserisci qui la descrizione dell'immagine

Oltre alla risposta corretta sopra, assicurati anche di aver impostato l'interfaccia principale corretta in Generale.


3

1a opzione

se desideri impostare il tuo storyboard personalizzato invece di un controller di visualizzazione predefinito.

Modifica questo attributo dal file info.plist

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

Onboarding sarebbe il nome dello storyboard

per aprire questo fare clic con il tasto destro sul file info.plist e aprirlo come codice sorgente

2a opzione

1- Clicca sul tuo progetto

2- Seleziona il tuo progetto dalla sezione di destinazione

3- Passare alla sezione dell'interfaccia di distribuzione

4- Cambia la sezione dello storyboard dal campo Interfaccia principale

Ricorda di impostare il controller della visualizzazione iniziale dello storyboard


1
La cosa <key> UISceneStoryboardFile </key> ha risolto il problema per me. Grazie.
bogdan

2

Se hai aggiunto un nuovo storyboard, devi controllare i seguenti punti.

1) Nel tuo file plist, il valore di controllo del nome base del file storyboard principale (iPad) o (iPhone) deve corrispondere al nome del file dello storyboard ( non aggiungere l'estensione .storyboard )

2) Nello storyboard dovrebbe esserci un controller di visualizzazione impostato come controller di visualizzazione iniziale

3) Pulisci e costruisci il tuo progetto. :)

inserisci qui la descrizione dell'immagine


1

Se hai eseguito regolarmente il commit del tuo codice nel controllo del codice sorgente, questo potrebbe evitarti il ​​fastidio di creare un nuovo Storyboard e possibilmente introdurre ulteriori problemi ...

Sono stato in grado di risolvere questo problema confrontando il codice sorgente Git della versione che funzionava con quella rotta. Il diff ha mostrato che la prima riga dovrebbe contenere l'ID del controller di visualizzazione iniziale, nel mio caso, initialViewController = "Q7U-eo-vxw" . Ho cercato nel codice sorgente per essere sicuro che l'ID esistesse. Tutto quello che dovevo fare era rimetterlo a posto e tutto ha funzionato di nuovo!

<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>

Di seguito sono riportati alcuni passaggi che possono aiutarti a risolvere i problemi:

  1. Fare clic con il pulsante destro del mouse sullo Storyboard in errore e utilizzare il controllo del codice sorgente> Commit ... per conservare le modifiche dall'ultimo commit.
  2. Prova a fare clic con il pulsante destro del mouse sullo Storyboard in errore e utilizza "Apri come> Codice sorgente" per visualizzare l'XML dello storyboard.
  3. Nell'elemento documento , cerca l'attributo denominato " initialViewController ". Se manca, non preoccuparti, lo aggiusteremo. Se è presente, fai doppio clic sull'id che gli è stato assegnato, comando-c per copiarlo, comando-f comando-v per cercarlo più a fondo nel documento. Questo è l'identificativo del controller che dovrebbe fornire la vista iniziale. Se non è definito nel documento, allora è un problema: dovresti rimuoverlo dal tag del documento, nel mio caso initialViewController = "Q7U-eo-vxw" .
  4. Vai alla voce di menu Xcode chiamata Visualizza e scegli Editor versione> Mostra vista di confronto
  5. Questo mostra la tua versione locale a sinistra e la versione storica a destra. Fare clic sulla data sotto la versione storica per ottenere un elenco dei commit per questo storyboard. Scegline uno che sai abbia funzionato e confronta l' elemento del documento . Qual è l'ID di * initialViewController ? È diverso? In tal caso, prova a modificarlo di nuovo a mano e in esecuzione. Strumento di confronto storico di xcode in azione

1

Controlla se hai la finestra var in AppDelegate.

var window: UIWindow? 

E controlla anche lo storyboard del tuo file Info.plist.

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

L'impostazione a livello di codice di rootViewController in AppDelegate non risolverà l'avviso. È necessario scegliere se lasciare allo storyboard impostare il controller di visualizzazione o farlo a livello di programmazione.


1

I progetti creati in Xcode 11 e versioni successive, la semplice modifica del file dell'interfaccia principale dalle impostazioni del progetto non sarà sufficiente.

È necessario modificare manualmente il file Info.plist e impostare anche il nome dello storyboard UISceneStoryboardFile.


1

Nessuno dei precedenti ha risolto il problema per me. Nel mio caso non stava anche impostando il manifesto della scena dell'applicazione corretto.

Ho dovuto cambiare LoginScreen usato per essere Main

inserisci qui la descrizione dell'immagine


Sorpreso questo non ha ottenuto tanti voti. Ciò accadrà praticamente in qualsiasi implementazione di SceneDelegate (che non utilizza Storyboard come controller iniziale).
bauerMusic
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.