ios - sierra - xcode ide mac




Cosa significa questo? "'NSUnknownKeyException', motivo:... questa classe non è la chiave di codifica del valore-compatibile per la chiave X" (20)

Sto cercando di collegare un UILabel con un IBOutlet creato nella mia classe.

La mia applicazione si blocca con il seguente errore. Cosa significa questo? Come posso ripararlo?

*** Termina l'applicazione a causa dell'eccezione non rilevata 'NSUnknownKeyException', motivo: '[<UIViewController 0x6e36ae0> setValue: forUndefinedKey:]: questa classe non è un valore chiave conforme alla codifica per la chiave XXX.'


Il tuo controller di visualizzazione potrebbe avere la classe sbagliata nel tuo xib.

Ho scaricato il tuo progetto.

L'errore che stai ricevendo è

'NSUnknownKeyException', motivo: '[<UIViewController 0x3927310> setValue: forUndefinedKey:]: questa classe non è un valore chiave conforme alla codifica per la stringa di chiavi.'

È causato dal controller di visualizzazione Second in MainWindow.xib con una classe di UIViewController anziché SecondView . Passare alla classe corretta risolve il problema.

A proposito, è una cattiva pratica avere nomi come "string" in Objective-C. Invita una collisione di nomi in fase di esecuzione. Evitalo anche nelle app di allenamento una tantum. Denominare le collisioni può essere molto difficile da rintracciare e non si vuole perdere tempo.

Un'altra possibile ragione per questo errore: quando copia e incolla elementi da un controller a un altro, Xcode mantiene in qualche modo quel collegamento al controller originale, anche dopo aver modificato e ricollegato questo elemento nel nuovo controller.

Un'altra possibile ragione per questo errore:

Cattivo Outlet.

Hai rimosso o rinominato un nome outlet nel tuo file .h.

Rimuovilo in .xib o nel pannello di ispezione dei file .storyboard.


Potresti avere una cattiva connessione nel tuo xib.

Ho avuto questo errore molte volte. Sebbene la risposta di TechZen sia assolutamente giusta in questo caso, un'altra causa comune è quando si modifica il nome di una proprietà IBOutlet nel file .h / .m che si è già connesso al proprietario di File nel pennino.

Dal tuo pennino:

  1. Seleziona l'oggetto in IB e vai a "Impostazioni di connessione".
  2. Sotto 'Referencing Outlets' assicurati che il tuo oggetto non sia ancora connesso al vecchio nome della proprietà ... se lo è, fai clic sulla piccola 'x' per eliminare il riferimento e creare nuovamente.

Un'altra causa comune se usi Storyboard, il tuo UIButton potrebbe avere più di un incarico (la soluzione è quasi la stessa del pennino):

  1. Apri lo storyboard e fai clic con il pulsante destro del mouse su UIButton
  2. Vedrai che c'è più di un attributo / riferimento a questo pulsante. Rimuovi una delle finestre in grigio "Principale ..." con la "x" piccola:


"questa classe non è la chiave di codifica del valore-compatibile per la chiave" So che è un po 'in ritardo ma la mia risposta è diversa, quindi penso che debba essere postata, stavo spingendo il secondo controller in modo sbagliato, Ecco un esempio

Modo sbagliato per spingere il controller

UIViewController* controller = [[UIViewController
 alloc]initWithNibName:@"TempViewController" bundle:nil];
         [self.navigationController pushViewController:controller animated:true];

Modo corretto

TempViewController* controller = [[TempViewController
 alloc]initWithNibName:@"TempViewController" bundle:nil];
         [self.navigationController pushViewController:controller animated:true];

Non ho trovato alcuna risposta come sopra, quindi potrebbe essere utile per qualcuno che ha lo stesso problema


A volte questo ha a che fare con il tuo "Inherit From Target" che deve essere impostato. Con le app a target singolo puoi semplicemente selezionare Eredita da target. Se hai più di un bersaglio seleziona il bersaglio desiderato.


Guardando oltre le altre risposte sembra che ci siano molte cose che possono causare questo errore. Eccone un'altra.

Se tu

  • avere una visualizzazione personalizzata
  • aggiunta una proprietà @IBInspectable
  • e successivamente lo cancellò

Quindi potresti anche ricevere un errore simile a

Impossibile impostare (xxx) proprietà ispezionata definita dall'utente su [La tua vista personalizzata] ...: questa classe non è conforme ai codici di codifica per la chiave [xxx].

La soluzione è eliminare la vecchia proprietà.

Aprire Identity Inspector per la classe, selezionare il nome della proprietà in Attributi runtime definiti dall'utente e premere il pulsante meno (-).


Ho appena avuto questo problema nel mio progetto duplicato e risolto controllando 2 posizioni:

1- Assicurati di avere il file .m nell'elenco -> Project - Build Phases - Compile Sources
2- Dopodiché, vai al generatore di interfacce (probabilmente si tratta di un errore che si verifica solo con IB) e scollega tutte le proprietà, etichette, immagini, ecc ... Quindi ricollega tutto. Mi sono reso conto che ho rimosso un attributo ma era ancora collegato in IB.

Spero che funzioni per alcuni.


Ho avuto lo stesso problema e anche se la risposta di TechZen è davvero sorprendente, ho trovato difficile applicare alla mia situazione.

Alla fine ho risolto il problema collegando l'etichetta tramite il Controller elencato sotto Oggetti (evidenziato nell'immagine sotto) piuttosto che tramite il File Owner .

Spero che questo ti aiuti.


Ho avuto lo stesso problema. Ho fatto il reset del simulatore. Rimozione e aggiunta del controllo pulsante. e finalmente fatto un pulito. :) Grazie allo . Alcuni come il mio codice è diventato ok e ha iniziato a funzionare.


Ho avuto questo errore quando stavo cercando di implementare un ViewCell personalizzato per un tavolo. Quando ho evidenziato View controller per XIB e connesso agli elementi in CellView ha causato l'errore "questa classe non è la chiave di codifica del codice compatibile per la chiave" una volta eliminati questi si è liberato dell'errore.

Elimina le connessioni nell'immagine sottostante.

Assicurati solo di avere le connessioni con la cella Visualizza tabella. Per controllare clicca sulla cella della vista tabella e in INSPECTOR cerca le tue connessioni.


Ho avuto un problema simile per un progetto che ha due obiettivi (con il proprio MainWindow XIB). Il problema fondamentale che mi ha causato questo errore era che la classe UIViewController non era inclusa nell'elenco delle risorse del secondo progetto. Ie interface builder mi ha permesso di specificarlo in MainWindow.xib, ma in fase di esecuzione il sistema non è riuscito a localizzare la classe.

Cioè, fai clic sulla classe UIViewController in questione e verifica che sia inclusa nella scheda "Target".


La proprietà "Module" di View Controller in Identity Inspector potrebbe essere diversa da quella prevista. Assicurati inoltre che nuove classi vengano aggiunte al tuo elenco di destinazione.


Mi stava succedendo solo quando eseguivo il debug su un dispositivo (iPhone). Il simulatore iOS funzionava correttamente. Fare un "Prodotto-> Pulisci" da Xcode sembrava risolvere il problema, ma non ho idea del perché.


Nel mio caso. Non avevo mancanze di prese nei file xib dopo la fusione.

Maiusc + Comando + K

risolto il mio problema Ho pulito il mio progetto e ricostruito.


Potrebbe essere il caso di fare riferimento a un componente dell'interfaccia Xib che hai rinominato o eliminato. Re-referencing funziona per me.


Questo errore è qualcos'altro!

Ecco come l'ho risolto. Sto usando xcode versione 6.1.1 e usando swift. Ho ricevuto questo errore ogni volta che la mia app ha provato a eseguire un passaggio per passare alla schermata successiva. Ecco cosa ho fatto.

  1. Controllato che il pulsante fosse collegato all'azione giusta. (Questo non era il problema, ma comunque buono da controllare)
  2. Controlla che il pulsante non abbia azioni o prese aggiuntive che potresti aver creato per errore. (Questo non era il problema, ma comunque buono da controllare)
  3. Controllare i registri e assicurarsi che tutti i pulsanti nella PROSSIMA SCHERMATA abbiano le azioni corrette e, se ci sono dei segui, assicurarsi che abbiano un identificativo univoco. (Questo era il problema)
    • Uno dei follower non aveva un identificatore univoco
    • Uno dei pulsanti aveva un'azione e due prese che ho creato per errore.
    • Elimina eventuali punti vendita aggiuntivi e assicurati che i passaggi successivi alla schermata successiva abbiano identificatori univoci.

Saluti,


Questo errore indica che un oggetto Interface Builder già connesso viene rimosso / rinominato nella fonte del proprietario (Proprietario del file).

Control-clic sul proprietario dei file nel generatore di interfaccia se vedi un punto esclamativo che devi correggere.

Nell'immagine qui sotto puoi vedere che "aRemovedView" ha un punto esclamativo alla sua destra, perché ho rimosso l'oggetto vista IBOutlet mentre era già connesso nell'IB.

Questo dà il seguente errore: Terminare l'app a causa dell'eccezione non rilevata 'NSUnknownKeyException', motivo: '[setValue: forUndefinedKey:]: questa classe non è un valore chiave che codifica-compatibile per la chiave aRemovedView.'


Se è un'app solo per iPhone, non universale, assicurati che il seguente campo sia vuoto:

Obiettivi> Riepilogo> Informazioni sulla distribuzione di iPhone / iPod> Interfaccia principale

Se si specifica un xib, si arresta in modo anomalo.


Se hai una sottoclasse UIViewController personalizzata con IBOutlet che causa problemi, l'unica serie di passaggi che ho trovato per eliminare effettivamente l'errore erano

.1 Cambia la classe in UIViewController

.2 Scollega tutte le prese (ora avranno tutte il triangolo giallo) - potrebbe essere sufficiente solo per disconnettere le prese problematiche.

.3 Esegui tutti i passaggi standard - ↑ ⌘K, elimina i dati derivati ​​(tappetini di preghiera, perline di preoccupazione)

.4 Avvia l'app: vai alla scena problematica.

.5 Elimina l'app, torna a Interface Builder e riporta la classe al nome della tua classe personalizzata.

.6 Ricollegare le prese.

Avvia l'app e questo normalmente ha risolto i problemi di conformità dei valori chiave.


Un altro problema "non conforme" che ho trovato è stato quando sono riuscito ad avere due copie di una classe per qualche motivo.

Stavo aggiungendo le chiavi alla copia sbagliata. Interface Builder ha ancora visto le chiavi e mi ha permesso di collegarmi a loro, ma in fase di esecuzione stava utilizzando l'altra copia della classe che non aveva le nuove chiavi.

Per trovare quale era la copia "giusta", ho usato il cmd-clic di XCode sul nome della classe altrove per passare alla copia corretta, quindi ho eliminato le copie non utilizzate (dopo aver portato prima le mie modifiche dalla copia non utilizzata).

Morale della trama: i file di classe duplicati sono cattivi.


nel mio caso si è verificato un errore nel codice sorgente dello storyboard, attenersi alla seguente procedura:

  1. per prima cosa apri lo story board come codice sorgente
  2. cerca <connections>
  3. rimuovere le connessioni indesiderate

Per esempio:

<connections>
    <outlet property="mapPostsView" destination="4EV-NK-Bhn" id="ubM-Z6-mwl"/>
    <outlet property="mapView" destination="kx6-TV-oQg" id="4wY-jv-Ih6"/>
    <outlet property="sidebarButton" destination="6UH-BZ-60q" id="8Yz-5G-HpY"/>
</connections>

Come vedi, queste sono connessioni tra i nomi delle variabili del codice e i tag xml del layout dello storyboard;)





interface-builder