Lo storyboard non contiene un controller di visualizzazione con identificativo


175

Continuo a ricevere il seguente errore:

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

Questo è il codice:

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

Ho già impostare la identifiersulla UIStoryboard, ma sto ancora ricevendo questo errore.

inserisci qui la descrizione dell'immagine



4
Sembra che tu abbia impostato l'identificatore di un segue, non un controller di visualizzazione. Quale controller di visualizzazione in quella foto stai cercando di presentare? E perché non stai semplicemente usando un segue?
Firoze Lafeer,

Fino a Driving view controller funziona bene .... rispetto a quando provo a presentare TableViewController ottengo l'errore ...... come lo faresti?
Mat,

Vai a Storyboard, rimuovi l'ID Storyboard e aggiungilo di nuovo. A volte è necessario pulire la cartella di build e i dati derivati
onmyway133,

Risposte:


244

Solo per riferimento futuro:

Sto sviluppando su iOS 6 utilizzando Storyboard.

Stavo riscontrando lo stesso problema, ma non sono riuscito a trovare il campo "Identificatore" nell'ispettore. Invece, basta impostare il campo "ID storyboard" su come si chiamerebbe l'identificatore. Questo campo si trova nella scheda "Mostra ispettore identità" nella finestra di ispezione.

[Nota: i commenti seguenti indicano che alcune persone hanno scoperto che devono (anche?) Impostare il campo "ID restauro" proprio sotto l'ID storyboard nell'ispettore. Fare clic su "Usa ID storyboard" non sembra essere sufficiente.]

C'è un'immagine qui sotto per riferimento: (in questo caso ho chiamato il mio identificativo lo stesso della mia classe) inserisci qui la descrizione dell'immagine


24
pre XCode 4.4 e precedenti: identificatore; XCode 4.5: Storyboard ID
ilmiacs,

Grazie per le vostre informazioni. Ho avuto problemi a trovare l'identificatore nello storyboard seguendo le spiegazioni in google, ma non sono riuscito a trovare l'identificatore in Xcode4.6. questo è un grosso problema per i principianti. Grazie.
principianti,

4
Quello che ha funzionato per me è stato usare ReuseIndentifier. L'ID storyboard provoca comunque un'eccezione puntatore null.
Droid Chris,

Stesso caso qui @DroidChris
Ahmed,

5
controllare "Usa ID storyboard" mi ha reso felice
preetam

189

In Xcode 7 - 11 ,

quando cambi gli ID dello storyboard e ricevi errori come questo,

basta PULIRE il tuo progetto ( CMD+ SHIFT+ K)


13
Perché dimentico sempre di farlo? Risolve i problemi più folli. Grazie, Ted, per avermelo ricordato!
AlphaCodaSeven

2
Questo problema si è verificato in XCode 7.2 durante il pull da un repository in cui a un VC nello storyboard era stato assegnato un identificatore. La pulizia del progetto sembrava risolvere il problema.
Ed George,

2
Pensavo di perdere la testa ... un semplice seguito non funzionava, questo ha funzionato.
dokun1,

2
Sì, funziona !!!! qualche volta la pulizia del progetto xcode rimuoverà il riferimento indesiderato al progetto
kiran,

3
Vengo da Android Studio e sviluppo Android. Questo è pazzesco quanti hack devo usare in XCode e Swift. Devo davvero piangere. Sul serio.
ktamas,

43

Fisso! Non solo l'identificatore nei seguenti deve essere impostato, nel mio caso DrivingDetails, ma anche l'identificatore nella mia tabella ViewController deve essere impostato come DrivingDetails ... controlla la mia foto:

inserisci qui la descrizione dell'immagine

Ho anche rimosso il controller della vista di navigazione, quindi ora i 2 controller della vista tabella sono collegati direttamente con un'animazione "push".

***** EDIT per XCODE 7.0 *****

devi impostare lo storyboardId (in questo caso viewController è incorporato in un controller di navigazione:

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

inserisci qui la descrizione dell'immagine


2
Sto riscontrando un problema simile a questa domanda, ma quando vado all'ispettore degli attributi non vedo 2 campi come nella schermata solo un campo Titolo, nessun campo identificatore
Anon957,

hai visto la risposta sopra? Penso che sia più aggiornato. Grazie
Mat,

1
L'identificatore per il seguito non ha nulla a che fare con questo. Solo lo Storyboard ID per il controller di visualizzazione deve essere impostato nello storyboard.
Jawwad,

Forse correlato. In iOS7 [storyboard instantiateViewControllerWithIdentifier]NON viene creata un'istanza delle viste da Interface Builder all'interno del controller di visualizzazione; ma in iOS6 lo fece
William Entriken il

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

Nota:

  • "StoryboardFileName"è il nome file dello Storyboard e non l'ID dello storyboard!
  • "StoryboardID"è l'ID che hai impostato manualmente nella finestra di ispezione delle identità per quello storyboard (vedi screenshot sotto).

ID storyboard

A volte le persone credono che il primo sia l'ID Storyboard e il secondo il nome della classe View Controller, quindi nota la differenza.


1
Questo!! Amico, hai appena risolto il mio mistero di 18 ore. Grazie per la spiegazione concisa.
Mrfevrier,

1
Gesù Cristo! Grazie per questo! .instantiateViewController(withIdentifier: "StoryboardID")dovrebbe essere rinominato in .instantiateStoryboard(withIdentifier: "StoryboardID")O semplicemente qualcosa di più sempliceUIStoryboard(name: "StoryboardFileName", bundle: nil).init()
roosevelt il

16

Identità situata nella scheda Ispettore identità denominata ID storyboard per Xcode 6.3.2 e selezionata l'opzione Usa ID storyboard. inserisci qui la descrizione dell'immagine


Questo è stato il problema da sempre, ha funzionato in entrambi i posti in cui avevo problemi. Non si sta impostando solo il valore ID storyboard, è necessario controllare "Usa ID storyboard"
Tyler Hack

"Usa Storyboard ID" è stato il pezzo vitale mancante per me. Grazie.
Marcy,

9

Ho appena avuto questo problema dopo aver aggiunto un nuovo VC allo storyboard ma solo sul dispositivo, non sul simulatore. Si scopre che era dovuto alla presenza di più localizzazioni dello storyboard: il VC è stato aggiunto solo a quello primario. Ho provato a rimuovere le altre localizzazioni (una delle quali è quella utilizzata dal mio iPhone) ma ho ancora l'errore. Alla fine ho dovuto ricreare le altre localizzazioni con il nuovo VC in ognuna di esse.


5

Il compilatore mostra il seguente errore:

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

Qui l'oggetto dello storyboard creato non è lo storyboard principale che contiene i nostri ViewController. Come file storyboard su cui lavoriamo è chiamato Main.storyboard . Quindi abbiamo bisogno di avere un riferimento all'oggetto del Main.storyboard .

Utilizzare il seguente codice per quello:

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

Ecco storyboardWithNameil nome del file dello storyboard con cui stiamo lavorando e bundlespecifica il bundle in cui si trova il nostro storyboard (ad es mainBundle.).


5

Per quelli con lo stesso problema di @Ravi Bhanushali, ecco una soluzione Swift 4:

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


A questo dovrebbe essere aggiunto un commento sulla risposta di @Ravi.
Sunil

Avrei, ma non ho la reputazione. Qualcuno con abbastanza reputazione è più che benvenuto a farlo
confitz20,

4

L'ho trovato fai clic sulla parola identità che poi mostra storyboardID - aggiungi l'identificatore dal codice, fatto


4

La modifica di "ID storyboard" nella finestra di ispezione identità (la terza icona a sinistra) dovrebbe funzionare.

Altrimenti e sei sicuro che non ci siano errori di battitura, prova a ripulire il progetto ("Prodotto" -> "Pulisci", o semplicemente comando + Maiusc + K).


salvato la mia vita. Grazie. (in particolare la parte sulla pulizia)
Jay

1

Durante l'immissione dell'identificatore non è stato selezionato il controller di visualizzazione corretto, basta controllare una volta se fatto ripetere la procedura ancora una volta.


quale controller di visualizzazione devo selezionare? scusa, sono confuso.
Mat,

TableViewController * controller = [self.storyboard instantiateViewControllerWithIdentifier: @ "drivingDetails"]; controller.title = [[dao libraryItemAtIndex: indexPath.row] valueForKey: @ "name"]; [self.navigationController pushViewController: controller animato: SÌ]; come questo?
Mat,

Come da immagine, TableViewController dovrebbe essere selezionato come si sta facendo per visualizzare i dettagli in quel controller.
iamsult,

Spiegazione passo per passo della storyboard
iamsult

1
Solo una piccola nota: l'identificatore segue e l'identificatore controller di visualizzazione sono diversi. Volevo solo evidenziare che in caso di confusione c'era un po 'perché stai usando lo stesso nome per entrambi. L'identificatore segue deve essere utilizzato in preparazioneForSegue e l'identificatore del controller di visualizzazione serve per caricare direttamente le visualizzazioni dallo storyboard. scott-sherwood.com/?p=219
Scott Sherwood il

1

Ad alcuni dei miei controller di vista mancava l' attributo storyboardIdentifier .

Prima:

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

Dopo:

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

0

Ho avuto lo stesso errore e ho potuto risolvere questo problema modificando le seguenti modifiche nel mio progetto. Ho citato il nome della mia classe nel pannello ispettore, quindi il problema è stato risolto. Vai a> pannello destro lì Ispettore identità Nella sezione classe personalizzata

class: il nome della tua classe (ViewController)

Nella sezione Identità ID storyboard: ID storyboard (viewController Name)

Dopo questo fai clic sull'opzione Usa ID storyboard laggiù. Il problema è finito. Spero che ti possa aiutare ...


0

Usa il tuo identificatore (@ "drivingDetails") come ID Storyboard.


0

è molto semplice selezionare il rispettivo controller di visualizzazione nella storyboard principale e controllare lo storyboardID se il suo presente lo usa nell'identificatore di dare un nome e usarlo.

qui il mio primo è lo storyboardID let vc = self.storyboard? .instantiateViewController (withIdentifier: "firstone") as! tabBarViewController


0

Ho provato tutte le soluzioni di cui sopra e nessuna ha funzionato.

Quello che ho fatto è stato:

  • Progetto pulito
  • Elimina i dati derivati
  • Riavvia Xcode
  • Inserisci nuovamente lo StoryboardID mostrato nelle risposte precedenti (all'interno di IB).

E poi ha funzionato. La cosa scioccante è che avevo inserito l'ID Storyboar nel generatore di interfaccia e questo è stato rimosso / eliminato dopo aver aperto nuovamente Xcode.

Spero che questo aiuti qualcuno.


0

Pulire tutto e chiudere Xcode non ha risolto il problema per me.

Ho dovuto eliminare viewController e crearne uno nuovo con un nuovo identificatore.


0

Nota: se si utilizzano cocoapods nel progetto, eseguire prima pod deintegrateerm Podfile.lock

Quindi aprire la cartella del progetto in qualsiasi editor di codice di terze parti come VSCode ed eseguire una ricerca globale per il nome ViewController che genera l'errore.

  1. Rinomina / correggi eventuali nomi errati che trovi.
  2. Salva tutte le modifiche.
  3. Pulisci e costruisci il tuo progetto.

Ora tutto dovrebbe funzionare bene.

Ciò è spesso causato quando si rinomina file da Xcode.


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.