Pertanyaan Apa artinya ini? "'NSUnknownKeyException', alasan: ... kelas ini bukan nilai kunci pengkodean-sesuai untuk kunci X"


Saya mencoba menautkan UILabel dengan sebuah IBOutlet dibuat di kelas saya.

Aplikasi saya mogok dengan kesalahan berikut. Apa artinya ini? Bagaimana saya bisa memperbaikinya?

*** Menghentikan aplikasi karena pengecualian 'NSUnknownKeyException' yang tidak tertangkap, alasan: '[<UIViewController 0x6e36ae0> setValue: forUndefinedKey:]: kelas ini bukan nilai kunci yang sesuai dengan pengkodean untuk kunci XXX.'


983


asal


Jawaban:


Pengontrol tampilan Anda mungkin memiliki kelas yang salah dalam xib Anda.

Saya mengunduh proyek Anda.

Kesalahan yang Anda dapatkan adalah

'NSUnknownKeyException', alasan: '[<UIViewController 0x3927310> setValue: forUndefinedKey:]: kelas ini bukan nilai kunci pengkodean-compliant untuk string kunci.'

Ini disebabkan oleh Second lihat pengontrol dalam MainWindow.xib memiliki kelas UIViewController dari pada SecondView. Mengubah ke kelas yang benar menyelesaikan masalah.

By the way, itu adalah praktik yang buruk untuk memiliki nama seperti "string" di Objective-C. Ini mengundang tabrakan penamaan runtime. Menghindari mereka bahkan dalam aplikasi praktek yang tidak aktif. Menamai tabrakan bisa sangat sulit dilacak dan Anda tidak ingin membuang waktu.

Alasan lain yang mungkin untuk kesalahan ini: saat menyalin & menempelkan elemen dari satu pengontrol ke yang lain, Xcode entah bagaimana menyimpan tautan tersebut ke pengontrol asli, bahkan setelah mengedit & menautkan kembali elemen ini ke pengontrol yang baru.


807



Anda mungkin memiliki koneksi buruk di xib Anda.

Saya sudah sering mengalami kesalahan ini. Sementara jawaban TechZen benar dalam kasus ini, penyebab umum lainnya adalah ketika Anda ubah nama properti IBOutlet di .h / .m Anda yang sudah terhubung ke Pemilik File di ujung pena.

Dari ujung pena Anda:

  1. Pilih objek di IB dan pergi ke 'Connections Inspector'.
  2. Di bawah 'Referensi Outlet' pastikan bahwa objek Anda tidak terhubung ke nama properti lama ... jika ya, klik kecil 'x' untuk menghapus referensi dan bangun lagi.

    example 1

Penyebab umum lainnya jika Anda menggunakan Storyboard, UIButton Anda mungkin memiliki lebih dari satu penugasan (Solusi hampir sama dengan nib):

  1. Buka storyboard Anda dan klik kanan UIButton
  2. Anda akan melihat bahwa ada lebih dari satu penetapan / ref ke tombol ini. Hapus salah satu dari "Main ..." dengan jendela abu-abu dengan huruf "x" kecil:

    example 2


1397



Saya harus menghapus aplikasi dari simulator / iPhone untuk menyingkirkan kesalahan ini.


101



Saya mengalami kesalahan ini ketika saya mencoba menerapkan Custom ViewCell untuk tabel. Ketika saya menyorot View controller untuk XIB dan terhubung ke elemen-elemen di dalam CellView menyebabkan kesalahan "kelas ini bukan nilai kunci yang memenuhi kode untuk kunci" setelah saya menghapusnya, ia menyingkirkan kesalahan.

Hapus koneksi di gambar di bawah ini. Delete the connections in inspector when File Owner is highlighted

Pastikan saja bahwa Anda hanya memiliki koneksi dengan Sel Tampilan Tabel. Untuk memeriksa klik pada sel tampilan tabel dan di INSPECTOR carilah koneksi Anda.

The connection should be in here when Table View Cell is highlighted


84



Jika ini adalah aplikasi iPhone saja, bukan yang universal, pastikan bidang berikut kosong:

Target> Ringkasan> Info Penerapan iPhone / iPod> Antarmuka Utama

Jika Anda menetapkan sebuah xib, maka ia akan crash.


61



Kesalahan ini menunjukkan bahwa Builder Antarmuka yang sudah terhubung objek dihapus / diganti namanya di sumber pemiliknya (Pemilik File).

Kontrol-klik pada Pemilik File di Interface Builder jika Anda melihat a tanda seru Anda perlu memperbaikinya.

Pada gambar di bawah ini Anda dapat melihat bahwa "aRemovedView" memiliki tanda seru di sebelah kanannya, itu karena saya menghapus objek tampilan IBOutlet ketika sudah terhubung di IB.

enter image description here

Ini memberikan kesalahan berikut: Mengakhiri aplikasi karena pengecualian 'NSUnknownKeyException' yang tidak tertangkap, alasan: '[setValue: forUndefinedKey:]: kelas ini bukan nilai kunci pengkodean kode untuk kunci aRemovedView. '


56



Saya memiliki masalah yang sama dan meskipun jawaban TechZen mungkin luar biasa, saya merasa sulit untuk menerapkannya pada situasi saya.

Akhirnya saya menyelesaikan masalah dengan menautkan label melalui Controller yang tercantum di bawah Objek (disorot pada gambar di bawah) ketimbang lewat Pemilik File.

Semoga ini membantu.

enter image description here


40



Kadang-kadang ini harus dilakukan dengan "Mewarisi Dari Sasaran" Anda Nilai itu harus ditetapkan. Dengan aplikasi target tunggal Anda hanya dapat memilih Mewarisi Dari Target. Jika Anda memiliki lebih dari satu target pilih target yang diinginkan. enter image description here


39



dalam kasus saya, itu adalah kesalahan dalam kode sumber storyboard, ikuti langkah-langkah berikut:

  1. pertama buka papan cerita Anda sebagai kode sumber
  2. pencarian untuk <connections>
  3. hapus koneksi yang tidak diinginkan

Sebagai contoh:

<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>

Seperti yang Anda lihat, ini adalah koneksi antara nama variabel kode Anda dan tag xml layout storyboard;)


33



Ini terjadi pada saya hanya ketika melakukan debug pada perangkat (iPhone). Simulator iOS berfungsi dengan baik. Melakukan "Produk-> Bersih" dari Xcode sepertinya memecahkan masalah, tetapi saya tidak tahu mengapa.


29



  1. Anda hanya perlu menentukan IBOutlet sekali, itu IBOutlet beri label ivar Anda tidak perlu.
  2. Apakah Anda instantiating NIB Anda menggunakan Anda UIViewController? Pada titik tertentu Anda harus menelepon [SecondView initWithNibName:@"yourNibName" bundle:nil];

27