Come risolvere in xCode ‘NSUnknownKeyException’, reason: … this class is not key value coding-compliant for the key X” error?

Condividi questo articolo:


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

La mia applicazione si blocca con il seguente errore.

Che cosa significa?

Come posso correggerlo?

*** Chiusura dell’applicazione a causa dell’eccezione non colta ‘NSUnknownKeyException’, motivo: “[<UIViewController 0x6e36ae0> setValue:forUndefinedKey:]: questa classe non è conforme alla codifica dei valori della chiave XXX.

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIViewController 0x6e36ae0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key XXX.'

Il vostro view controller potrebbe avere la classe sbagliata nel vostro xib.

L’errore che stai ricevendo è

NSUnknownKeyException’, motivo: “[<UIViewController 0x3927310> setValue:forUndefinedKey:]: questa classe non è conforme alla codifica dei valori della chiave per la stringa della chiave.
È causata dal fatto che il Second view controller in MainWindow.xib ha una classe di UIViewController al posto di SecondView. Il passaggio alla classe corretta risolve il problema.

A proposito, è una cattiva pratica avere nomi come “stringa” in Objective-C. Invita ad una collisione dei nomi in runtime. Evitateli anche nelle applicazioni di prova una tantum. Dare un nome alle collisioni può essere molto difficile da rintracciare e non si vuole perdere tempo.

Un’altra possibile ragione per questo errore: quando si copiano e si incollano elementi da un controllore ad un altro, Xcode mantiene in qualche modo quel link al controllore originale, anche dopo aver modificato e ricollegato questo elemento nel nuovo controllore.

Un’altra possibile ragione per questo errore:

Si è rimosso o rinominato un nome di uscita nel file .h.

Rimuovetelo nel file .xib o nell’ispettore di connessione del file .storyboard.

Soluzione alternativa:

Potresti avere una cattiva connessione nel tuo xib.

Ho avuto questo errore molte volte. Mentre la risposta di TechZen è assolutamente corretta in questo caso, un’altra causa comune è quando si cambia il nome di una proprietà IBOutlet nel tuo .h/.m che hai già collegato al Proprietario del file.

Selezionate l’oggetto in IB e andate al ‘Connections Inspector’.
Sotto ‘Referencing Outlets’ assicuratevi che il vostro oggetto non sia ancora collegato al vecchio nome della proprietà… se lo è, cliccate la piccola ‘x’ per cancellare il riferimento e costruire di nuovo.

Un’altra causa comune se si utilizza Storyboard, il vostro UIButton potrebbe avere più di una assegnazione (la soluzione è quasi la stessa del pennino):

Aprite lo storyboard e cliccate con il tasto destro del mouse sul pulsante UIButton
Vedrete che c’è più di un assegnato/rifiuto a questo pulsante. Rimuovere una delle finestre “Main…” grigie con la piccola “x”:


Per ulteriori informazioni visita il sito: immagi.net

Condividi questo articolo: