"Impossibile trovare informazioni per la classe denominata ViewController"


154

Questo bug mi ha fatto impazzire da quando ho iniziato a usare Xcode (4.6.3). Ogni volta che provo a collegare un elemento Storyboard al mio codice, viene visualizzato l'errore:

Impossibile trovare informazioni per la classe denominata ViewController.

Questo succede anche con le classi personalizzate. Ho provato metodi come:

  • Eliminazione dei dati delegati.
  • Rimozione e aggiunta di nuove classi.
  • Riavvio di Xcode.
  • Reinstallazione di Xcode.

Non posso trascinare tenendo premuto il tasto Ctrl per creare connessioni in nessuno dei miei progetti, indipendentemente dalla classe. Lo stesso problema si verifica con un'applicazione modello nuovissima. Se scrivo il codice manualmente e quindi trascino il tasto Ctrl, posso stabilire una connessione funzionante, ma non posso aggiungerlo automaticamente. Niente che abbia potuto trovare finora su Internet mi ha aiutato. Qualche puntatore?


Sei tre volte sicuro che il file .m ViewController sia incluso nella destinazione corretta? (casella nel riquadro di ispezione a destra)
Alfie Hanssen,

2
È presente un controller di visualizzazione nello storyboard e specificato "ViewController" per il nome della classe che deve essere istanziata per gestire la vista. Controlla ogni controller di visualizzazione nello storyboard: seleziona il controller di visualizzazione, controlla "Controllo identità" nel riquadro di destra e controlla la proprietà "Classe personalizzata". Se legge "ViewController", allora c'è il tuo problema. Inserisci il nome della classe che dovrebbe gestire il tuo controller di visualizzazione ... o inserisci UIViewController per ottenere l'implementazione predefinita di UIKit.
Nicholas Hart,

1
Ho cambiato la classe personalizzata in "UIViewController" nella finestra di ispezione identità e non sono più stato in grado di trascinare tenendo premuto il tasto Ctrl dallo storyboard a ViewController.h. Se creo una nuova classe e provo a trascinarla in essa (dopo aver impostato la classe del controller di visualizzazione di conseguenza), ottengo lo stesso errore "Impossibile trovare alcuna informazione".
user2597451

4
Ho avuto questo problema e la modifica della classe ViewController generata automaticamente ha funzionato per me. Ad esempio, aggiungi un NSLog()toviewDidLoad:
jb

Risposte:


292

Ciò che ha risolto questo problema per me è stato in realtà l'eliminazione della classe dal progetto.

passi:

  1. Nel file explorer del progetto (riquadro a sinistra) trova la classe e fai clic con il tasto destro -> Elimina
  2. Rimuovi riferimento (non passare al cestino in quanto perderai definitivamente la lezione)
  3. Fare clic con il tasto destro sulla cartella che conteneva la classe -> Aggiungi file a ...
  4. Trova la classe che hai appena eliminato nel file system

Questo sembra forzare Xcode a ricollegare la classe allo storyboard.

Nota: per me non ha funzionato:

  • Xcode di chiusura
  • Pulizia del progetto
  • Eliminazione del nome della classe dallo storyboard e reinserimento

Penso che questo sia un bug da parte di Apple


8
Ho provato questo, ma non ha funzionato per me / -: stesso errore.
Michael,

1
@Michael, Sì, ora sono in una situazione in cui nessuna delle precedenti funziona affatto. Xcode è un ***
Chris Harrison,

5
Questo numero risale a luglio 2013, a partire da oggi maggio 2016 ricevo lo stesso bug e lo risolvo con questa risposta. Come mai in tanti anni Apple non lo risolve per sempre?
SkyWalker,

3
Non riesco a credere che questo sia ancora un problema. Ho dovuto farlo su XCode 8.1 ..
fisk,

2
2017 (Versione 8.2 (8C38)) e ancora vivo, Xcode SUCKS. Mi succede quando copi e incolli il personale dell'interfaccia utente dallo storyboard da una scena all'altra
Jaime Agudo,

135

Nel caso in cui qualcuno sia ancora frustrato da questo, c'è un trucco per far funzionare le cose.

Quello che faccio è inserire manualmente uno sbocco nella mia classe, ad esempio: @IBOutlet weak var someView: UIView!e trascinare dal codice alla vista in IB o storyboard. Dopo questo, sono in grado di trascinare da IB / Storyboard alla mia classe per stabilire connessioni, l'assistente editor riconosce la classe in "Automatico", ecc ...

Funziona ogni volta.


6
@ Gmeister4, se crei un punto vendita nel tuo codice, questo mostra un piccolo cerchio a sinistra del punto vendita. Fare clic e trascinare da quel cerchio alla vista in IB o Storyboard per stabilire la connessione.
Andrew Robinson,

4
Più facile della risposta migliore. +1
cph2117,

2
Ancora non può farlo nel modo corretto in giro, nemmeno dopo questo - ma almeno questo funziona!
Alexandre G,

1
Nessuna delle risposte sopra ha funzionato per me. Solo questa risposta ha funzionato per me.
coolcool1994,

1
Fantastico, tutto qui!
Sam,

38

Per me rimuoverli dal tuo abbonamento di destinazione nella colonna di destra e aggiungerli di nuovo ha fatto il trucco inserisci qui la descrizione dell'immagine


Anche questo ha funzionato da me. Avevo duplicato la classe ViewController.swift e questa sembra essere la soluzione.
UberJames,

Penso che sia un bug di Xcode che esiste ancora in Xcode 8.0
jiangjiefs

Questo è successo ora a me in Xcode 8.3.3 e la tua soluzione è la più semplice e funziona. Quindi grazie!!!
RoberRM,

Esistono ancora in Xcode 11.5 (intendo seriamente Apple ??). L'unica soluzione che ha funzionato per me è elencata qui.
Christophe Fondacci,

12

A volte Xcode fa a causa del VC che non fa riferimento al file di classe. La soluzione semplice per questo è:

scrivere la proprietà manualmente come indicato.

class YourClassName{

     @IBOutlet weak var YourTableName: UITableView!

}

Questo farà un segno di collegamento vuoto prima di @IBOutlet , aprirai il tuo progetto nell'editor assistente, quindi fai clic sul segno di collegamento inserisci qui la descrizione dell'immaginee trascinalo nella vista che desideri connettere (ho effettuato il collegamento con TableView). e questo è tutto. Buona codifica !!!


8

Ho appena avuto questo problema ad aprile 2017 con Xcode 8

La semplice creazione di un outlet tramite il codice e la compilazione lo hanno risolto. per esempio:

@IBOutlet weak var containerViewHeight: NSLayoutConstraint!

Devi amare Xcode ...

Modifica: continua ancora su Xcode 9


7

i seguenti passaggi funzionano per me spero che funzioni anche per te

1- È necessario riaprire il progetto dopo aver chiuso Xcode.

2- Attendere l'indicizzazione dei file di progetto

3- Controlla se funziona o no

4- Se ancora non funziona segui il passaggio 5, se non sei contento per te :)

5- Pulisci e costruisci il tuo obiettivo di progetto

inserisci qui la descrizione dell'immagine


7

Ho provato di tutto e non ha funzionato, quindi per me quello che ha funzionato è:

  • Cartella e progetto di Build Clean.
  • Progetti aperti (Finestra -> Progetti)
  • Trova il tuo progetto nell'elenco ed elimina i dati derivati
  • Chiudi Xcode
  • Riavvia il computer (senza scegliere di riaprire le finestre aperte)
  • eseguire Xcode
  • Lavoro!

Tutti i miei controller di visualizzazione non venivano riconosciuti, quindi eliminare tutti i file e aggiungere nuovamente non era un'opzione in quanto si tratta di un grande progetto.


4

Per me, ha funzionato:

  1. Esegui una "cartella pulita" e una "cartella build pulita" (premi "opzione" nel menu Prodotto per ottenere il comando "cartella build pulita"

  2. Ferma Xcode

  3. Nel terminale, vai alla cartella dei dati derivati:

    (/ Users // Library / Developer / Xcode / DerivedData)

Elimina la directory dei dati derivati ​​per il tuo progetto.

  1. Agita un pollo morto nell'aria

  2. Avvia Xcode


3

Finora ho dovuto fare una combinazione di un paio di risposte:

  1. Rimuovi il nome della classe personalizzata dallo storyboard.

(Fai clic sul pulsante giallo nella parte superiore sinistra del controller di visualizzazione nello storyboard -> vai alla finestra di ispezione identità (opzione + comando + 3) -> elimina il nome della classe personalizzata in alto)

  1. Rimuovere il riferimento al file del controller di visualizzazione.

(Fare clic con il tasto destro del mouse sul file -> elimina -> rimuovi riferimento)

  1. Aggiungi il file del controller di visualizzazione al progetto.

(Fare clic con il tasto destro sulla cartella in cui si trovava il file -> "Aggiungi file a [progetto]")

  1. Aggiungi il nome della classe personalizzata allo storyboard.

3

Se le persone provano quanto sopra e le cose non funzionano ancora, lo strano trucco che ha funzionato per me è stato l'aggiunta dello sbocco in un pezzo di spazio bianco. Funziona se non ci sono altre linee direttamente sopra o sotto la linea che stai aggiungendo. Strano, ma ha funzionato!


3

Ciò che ha funzionato per me è stato, invece di trascinare la connessione dal pulsante al codice, era:

  1. Facendo clic sull'elemento storyboard desiderato.
  2. Apertura della finestra di ispezione delle connessioni (pannello a destra)
  3. Trascinamento dal cerchio + nell'area del codice. Così:

dopo aver collegato il mio codice in questo modo, ha funzionato normalmente da quel momento in poi.


3

Rimani sull'obiettivo!

Stavo aggiungendo una nuova classe con uno Xib e ho iniziato a vedere questo problema e ho passato un bel momento a guardare le risposte qui e vedere se qualcuno di loro ha fatto la differenza.

In effetti, ho più target nel mio spazio di lavoro e spesso devo passare da uno all'altro.

Si scopre che l'aggiunta di nuovi file avvia un reindicizzazione in Xcode. Ma se stai puntando al bersaglio sbagliato, allora l'indicizzazione è probabilmente insignificante e durante il trascinamento per connettere Xcode non sarà in grado di trovare la tua classe.

In breve

Passo 1.

Selezione target

Assicurati di avere il target corretto impostato in modo che l'indicizzazione abbia senso.


3

Questo ha funzionato per me:

  1. Eseguire ' Pulisci cartella build '
    (premere e tenere premuto il tasto 'opzione' e andare su " Prodotto accedere al menu " per accedervi.
  2. Eseguire un semplice "Clean" (CMD-SHIFT-K) dal menu " Prodotto ".
  3. Crea il progetto per consentire a Xcode di compilare i file. Inoltre, lascia che indicizzi i file se necessario.

In una nota a margine, non sono sicuro che ciò abbia aiutato, ma ho anche eliminato i dati derivati prima di eseguire i passaggi precedenti (Preferenze Xcode> Posizioni)


2

Selezionare ViewController in storyBoard, eliminare il valore corrente nel pannello a destra / "Classe cliente" / "classe", quindi aggiungere nuovamente la classe di controllo (digitare: "SampleViewController" ...), inserire. -> Quello funziona per me


2

Ho provato tutte queste risposte, il problema per me era legato al fatto che Xcode non era in grado di indicizzare i file. Ho risolto semplicemente abbandonando Xcode e riaprendo il progetto. Ovviamente l'ho fatto dopo aver provato tutte le soluzioni di cui sopra: p


2

Prodotto> Clean (Command - Shift - K) risolto il problema per me!


2

Questo è il passo più FACILE che ho fatto per risolvere questo problema.

  1. Pulisco il progetto
  2. Trascina un nuovo pulsante nel controller di visualizzazione.
  3. Costruisci il progetto.
  4. Collegare il pulsante appena trascinato alla classe (presa o azione).
  5. Allora voilà !!! Altri punti vendita possono ora essere nuovamente collegati alla classe!

1

Come esperienza di test, se si elimina una classe associata all'Xcode e si aggiunge nuovamente il file, si verificherà questo problema.


1

Di solito quando questo accade a me non ho ancora salvato il codice per la classe. Passa al codice e premi cmd + se spesso risolve il problema nel modo giusto.



1

Nessuno dei passaggi precedenti ha funzionato per me, ma penso di aver scoperto il problema. Almeno è ciò che ha funzionato per me, e non è un bug in Xcode.

Quando sei nell'editor assistente, guarda nella parte superiore della finestra che ha il codice per il tuo ViewController. La terza opzione da destra probabilmente dice "Manuale", ma dovrebbe dire "Automatico". Una volta modificato, il problema è stato risolto!


1

Stavo ricevendo un problema simile, "Impossibile trovare una classe di nome ..." e la causa è stata stupida da parte mia una volta che l'ho capito. Assicurati di non trascinare dall'elemento all'interfaccia : assicurati che venga trascinato sulla classe stessa


1

Ho provato TUTTO!

Assicurati che il nome della classe di UIViewController non contenga la parola "Test"

Segnalazione bug inviata.


Sicuramente non dire che questa è l'unica causa. Solo che questa è un'altra cosa da tenere presente.
Aaron Kreipe l'

Aiutami a cancellare tutti i dati derivati, progetto pulito. Ma questo è un bug e hai ragione.
Genevios

0

Vorrei provare a rifare i file .m e .h in questione e dare loro un nome originale, non generico come "ViewController". Prova qualcosa di più sulla falsariga di quello che vuoi che faccia quel file, e termina con View Controller (ad esempio "PizzaDecoraterViewController")

Quindi selezionare il ViewController che si desidera connettere a quei file. Assicurati di selezionare ViewController, non solo un oggetto all'interno. Fai clic sulla barra nera in basso (quella con le icone "First Responder" e "Exit"). L'intero ViewController dovrebbe apparire in blu. Quindi vai alla sezione Classe personalizzata in Identity Inspector e nel primo campo dovresti vedere un "UIViewController" in grigio. In quel campo, digita il nome del file .h o .m al quale vuoi connetterti (Inizia a digitare PizzaDecorator ... e dovrebbe fare un po 'di auto-completamento). Quindi premi INVIO.

Quando si apre Assistant Editor, assicurarsi che il file che si sta tentando di trascinare sia, in effetti, il file corretto.

Se hai fatto tutto come detto sopra, allora dovrebbe funzionare.


Sfortunatamente non funziona ancora. Ho provato a farlo prima senza alcun risultato. Ecco uno screenshot: i.imgur.com/5ixtcps.png
user2597451

Huh. Strano. Prova ad aggiungerli in modo programmatico (ad esempio @property (non anatomico, forte) IBOutlet UIView * test;) e quindi quando appare il piccolo cerchio accanto ad esso, trascina e rilascia su UIView.
CaptJak,

Funziona e ha sempre (e le app sembrano funzionare bene), ma sto cercando di risolvere il problema che non si aggiungerà automaticamente.
user2597451

Bene, se funziona così, allora dovrebbe funzionare diversamente. Bug nel tuo XCode? Prova a ottenere una versione precedente (come 4.6.2 o qualcosa del genere) e installala. Altrimenti, ummmmmmmmmmmmmmm ...... sì ....
CaptJak

Sì, questo è ciò di cui ho paura. Disinstallare e reinstallare non ha funzionato, speravo di sbagliare. Qual è il modo migliore per eseguire il downgrade della mia copia di Xcode?
user2597451


0

Elimina i file (solo i riferimenti) e aggiungi nuovamente i file.


0

Bene nel mio caso, la cosa che ha funzionato (è un po 'strana, ma ha funzionato) è la seguente:

Prova ad aggiungere un'origine dati (ad es. Un'estensione a ViewController come UITableViewDataSource). Xcode proverà a ricaricare ViewController. Quindi ho scritto alcuni metodi del protocollo (all'inizio Xcode non ha completato automaticamente i metodi, ma li ho scritti manualmente), quindi ho aggiunto gli IBOutlet e, infine, ho rimosso l'origine dati.

Esempio:

class TestViewController:UIViewController{
    // This viewController presents “Could not find any information for  class named ViewController”
}

extension TestViewController:UITableViewDataSource{
    //Add Some methods of the protocol, Xcode will try to autocomplete and then it's going to reload the class, from then you can add your IBOulets / Actions .. And remove this extension if you don't need it otherwise.
}

0

Per me, la vista per la quale avevo specificato una classe personalizzata non veniva compilata dal builder di interfacce. È stato segnato @IBDesignable.

Rimuovere @IBDesignable, quindi aggiungere i miei punti vendita e quindi contrassegnarlo come @IBDesignablerisolto il problema nel mio caso.



0

prova questo

rm -rf ~/Library/Caches/com.apple.dt.Xcode
defaults delete com.apple.dt.Xcode IDEIndexDisable
defaults write com.apple.dt.Xcode IDEIndexEnable 1 
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.