Xcode 6 Bug: class sconosciuta nel file Interface Builder

Ho aggiornato a Xcode 6 beta 4 e ora la mia app si blocca continuamente con il messaggio

Classe X sconosciuta nel file Interface Builder.

Si blocca perché apparentemente Xcode non riesce a trovare le mie classi personalizzate che ho collegato nella mia Storyboard ma mostra che sono collegate correttamente nell’interfaccia Xcode.

Sono sicuro che tutto sia collegato correttamente. La mia unica altra opzione potrebbe essere quella di eliminare l’intero file storyboard e iniziare da zero perché potrebbe essere danneggiato in qualche modo.

Edit: Vorrei anche aggiungere che ho provato a pulire, resettare il simulatore, fare casino con le fasi di compilazione, ecc. Non funziona.

Ho risolto questo problema mentre stavo scrivendo la domanda. Ho pensato di rispondere alla mia domanda e di lasciarla qui per chiunque possa affrontare questo problema quando usa Xcode 6 beta 4.

Per risolvere questo problema, è necessario selezionare ciascuno degli oggetti di class personalizzati in Storyboard (questo include eventuali visualizzazioni personalizzate, anche i controller di visualizzazione personalizzati stessi).

Quindi, con gli oggetti selezionati, apri l’ispettore id quadro e in “Classe personalizzata” dovresti vedere l’opzione Modulo. Fare clic all’interno della casella di testo Modulo e premere Invio.

Questo è tutto! L’attuale modulo per tutti i miei oggetti personalizzati deve essere stato impostato internamente in modo non corretto in XCOD 6 beta 4. Ma nell’ispettore non vi era alcuna indicazione visiva.

Notare che se si preme invio nella casella di testo del modulo non funziona, provare a selezionare la freccia a destra e selezionare manualmente il modulo corrente, quindi deselezionare la casella di testo e premere Invio. Puoi anche provare a premere invio all’interno della casella di testo della class (anche se questo di solito è per risolvere un altro problema).

Ecco un’immagine per rendere le cose più chiare: inserisci la descrizione dell'immagine qui

A volte Xcode ha perso customModule="AppName" customModuleProvider="target"

Per risolvere il problema, apri lo storyboard come codice sorgente e sostituisci questa riga:

  

a questa:

  

Ho avuto questo problema dopo aver rinominato una class veloce. Risolto usando la direttiva @objc:

 @objc(ForumTopicListViewController) class ForumTopicListViewController 

Questo ha funzionato per me ..

Controlla la tua origine compilata, indipendentemente dal fatto che quel file (ad es. ViewController.m) sia aggiunto o meno, nel mio caso il file ViewController non è stato aggiunto quindi mi ha dato l’errore ..

inserisci la descrizione dell'immagine qui

Questo può accadere in qualsiasi Xcode sopra 6.0. È successo a me dopo aver rinominato alcune classi ViewController nel progetto Swift (ma immagino che accada anche con Obj-C). Devi solo aprire il generatore di interfacce, andare in Identity Inspector di ViewController che ha cambiato la sua class, selezionare la class e premere Invio. Questo riassegnerà la class rinominata al ViewController selezionato e resetterà anche il valore del modulo che si perde dopo aver rinominato la class.

Aggiornamento per Xcode 8.1 (probabilmente anche 8.0):

Xcode 8.1 si blocca appena. Semplicemente e fastidiosamente si blocca e non stampa nulla. Stavo inseguendo quell’incidente fantasma per un’ora solo per scoprire che era proprio la stessa cosa – class non assegnata in IB. Se stai riscontrando alcuni arresti anomali, ricontrolla prima IB per le classi non assegnate.

A volte il controller che stai fornendo perde la sua appartenenza al target dall’applicazione corrente. In tal caso, premendo enter sul campo “Module” non si farà nulla. Vai al controller e assicurati che abbia l’appartenenza al target impostata per l’app corrente.

Progetto con più destinazioni

Nel mio caso sto lavorando su Project con più target e il problema era “inherit from target” era deselezionato. Selezionando “inherit from target” ho risolto il mio problema

inserisci la descrizione dell'immagine qui

La mia risposta: impostare Modulo personalizzato uguale al nome del pod personalizzato (nel mio esempio – nome della class personalizzata) come nello screenshot allegato

Questa soluzione è per un caso specifico : per le classi di visualizzazioni personalizzate dal framework Pod (o Carthage ).

Infrastruttura: XCode8, Swift3

inserisci la descrizione dell'immagine qui

L’ho risolto facendo esattamente l’opposto di quello suggerito da ChikabuZ (grazie per averlo indicato, però). Nel file storyboard, trova questo:

  

e sostituirlo con questo:

  

Non posso credere a quante ore sto perdendo per aggirare bug nel compilatore Swift e Xcode 6

Ho affrontato questo problema in Xcode 8 , per risolverlo ho dovuto modificare lo storyboard nell’editor di testo.

In generale, cerca il tuo controllo e rimuovi customModule e customModuleProvider dall’ quadro di controllo.

Ha fatto un trucco per me

Selezionando il Module corretto per la mia Custom Class ho risolto questo problema.

Ecco qui :

inserisci la descrizione dell'immagine qui

Ho affrontato questo problema in Xcode 6.1 quando ho rimosso Main.storyboard , il file LaunchScreen.xib e le classi LaunchScreen.xib predefinite dal mio progetto.

L’ho risolto eliminando le voci Launch Screen File e Main Interface da Info.plist

Ho avuto lo stesso problema.

Nel mio caso, Xcode non aggiungeva la mia class personalizzata a: Target> Build Phase> Compile Sources.

Quindi ti consiglio di verificare se il tuo CustomClass.m è lì.

inserisci la descrizione dell'immagine qui

Spero che questo ti aiuta.

Ho cercato ovunque su google. Nessuna delle risposte funziona per me finché non ho incontrato un tizio che mi ha chiesto di spostare la cartella del mio progetto sul desktop. Ha funzionato automaticamente. Apparentemente se hai la cartella del progetto in profondità in molte cartelle, XCODE si interrompe.

Verifica se la tua class ha diritto di iscrizione ai target .

Questi passaggi funzionano per me.

1) Cancella dati derivati.
2) Rimuovi i file .h e .m
3) Crea nuovamente file .h e .m

Ho risolto questo problema aprendo il mio file storyboard come codice sorgente e utilizzando il comando-F per cercare la mia class sconosciuta ed eliminare la class personalizzata ad essa associata.

Quello che @gfrs ha detto è corretto, è necessario impostare il modulo. Tuttavia, una volta mi sono imbattuto in un problema che la mia class non era elencata nel menu a discesa Class . Alla fine ho rimosso il file swift, riavviato Xcode e ricreato il file. Finalmente la class è stata elencata e potrebbe essere utilizzata in Storyboard.

Dai anche un’occhiata a questa risposta , che sembra risolvere il problema “reale” che ho incontrato.

Ho risolto questo problema digitando il nome del modulo (sfortunatamente l’elenco a discesa non mostrerà nulla …) nella class personalizzata dell’ispettore id quadro per tutto il controller Visualizza e le viste.

Potrebbe anche essere necessario indicare il fornitore di destinazione. Per raggiungere questo objective è ansible aprire lo storyboard in modalità codice sorgente e aggiungere l’attributo “customModuleProvider” in ViewController e Visualizza parentesi angolari.

La mia soluzione (Xcode 8.1 Swift 3.0):

Classe sconosciuta xxx nel file Interface Builder.

Apri StoryBoard come codice sorgente e cerca xxx . Rimuovi l’attributo che contiene il valore xxx . Costruisci ed esegui.

Nel mio caso, la class a cui si fa riferimento in Storyboard / xib non ha impostato l’ appartenenza di destinazione .

Per correggere, dai .h e .m della class la stessa appartenenza al target delle altre classi.

Nessun set di appartenenze di destinazione.

Nel mio caso, ho aggiunto un flag -ObjC ad Other Linker Flags nelle impostazioni del progetto per farlo funzionare. Inoltre ho provato con -all_load flag e ha funzionato bene anche.

inserisci la descrizione dell'immagine qui

Ho affrontato il problema quando ho portato lo storyboard dal progetto Swift al progetto Objective-c, notando la risposta di vvkuznetsov , è risultato che i due progetti utilizzavano lo stesso identificatore. I “Prodotto -> Pulisci” e tocca il tasto Invio nel campo di testo Modulo e Classe. il problema è andato via.

La mia soluzione era rimuovere @objc dalla definizione della class personalizzata.

Ho risolto questo concetto seguendo le linee suggerite da Laura, ma non ho avuto bisogno di ricreare i file.

Utilizzando XCode 4, in Project Navigator, selezionare il file .m che contiene la class di cui si lamenta

Vai a Visualizza-> Utilità-> Mostra File Inspector (questo mostrerà il File Inspector a destra, con le informazioni del file m)

Apri la sezione Target Membership e assicurati che il tuo target sia selezionato per questo file .m

Quando ho aggiunto il mio file .m al mio progetto, non l’ho aggiunto al mio target predefinito per qualche motivo e questo mi ha fatto ottenere l’errore che hai menzionato.

Quello che ha funzionato solo per me è in realtà l’aggiunta del nome del modulo al file xib …

Sooo, i file xib hanno questo aspetto:

 mymodule.MyViewController.xib (Module being the name of the proyect, usually) 

Secondo me la soluzione ORRIBILE, ma si suppone che Apple voglia che lo facciamo ora.

Questa domanda mostra 3 possibili lavori in giro nella beta 4 … a quanto pare Apple non è stata molto utile in questa situazione secondo alcuni perché la chiamano “Funzionando come previsto”.

Ho avuto lo stesso problema con Xcode versione 6.1 (6A1052d). Penso che il problema si presenti se hai rinominato il tuo progetto App / Xcode.

La mia soluzione era di aggiungere manualmente il nome del modulo nel generatore di interfacce.

Ho avuto questo problema dopo aver aggiunto un nuovo target, quindi creato una nuova class usando la finestra di dialogo “Nuovo file”, ma non sono riuscito a controllare il nuovo target e il target originale nella finestra di creazione, quindi l’object è stato aggiunto solo al mio objective originale. La soluzione consisteva nell’eliminare i file di origine (rimuovere solo il riferimento), quindi aggiungerli di nuovo usando “Aggiungi file”, questa volta controllando entrambi i target.

La soluzione era diversa per me. È necessario aggiungere il .m della class alle origini compilate della fase di compilazione della destinazione.

Spero che questo ti aiuti!

Seleziona il tuo file di class sconosciuta, apri la scheda di ispezione del file, controlla il tuo nome di Target Membership . Ecco qua.