Xcode 6 Bug: Kelas tidak dikenal dalam file Interface Builder

600

Saya memutakhirkan ke Xcode 6 beta 4 dan sekarang Aplikasi saya terus macet dengan pesan

Kelas X tidak dikenal dalam file Interface Builder.

Itu macet karena seharusnya Xcode tidak dapat menemukan kelas khusus saya yang saya tautkan di Storyboard saya tetapi itu menunjukkan bahwa mereka terhubung dengan benar di antarmuka Xcode.

Saya yakin semuanya terhubung dengan benar. Satu-satunya pilihan saya adalah menghapus seluruh file storyboard dan mulai dari awal karena mungkin entah bagaimana rusak.

Sunting: Saya juga ingin menambahkan bahwa saya mencoba membersihkan, mengatur ulang simulator, mengacaukan fase pembuatan dll. Tidak ada yang berhasil.

Epic Byte
sumber
Kemungkinan duplikat stackoverflow.com/questions/3416269/…
Bouke
1
@ ImreKelényi Anda benar. Ini terjadi pada saya lagi baru-baru ini setelah melakukan apa yang baru saja Anda gambarkan.
Epic Byte
Ini bekerja untuk saya, stackoverflow.com/questions/1725881/…
vrunoa
Itu salah ketik bagi saya, debug ke elemen Control, sampai ketika tiba, pilih; Lihat Pengendali> pemeriksa identitas> Kelas Khusus> Kelas. hapus itu jika kelas itu tidak didefinisikan.
mavericks
9
TOLONG DICATAT! "Kesalahan" ini dapat berasal dari berbagai sumber. Jika jawaban yang diterima tidak berhasil untuk Anda, maka turunlah dan coba jawaban berikutnya. Jawaban yang benar untuk situasi saya adalah jawaban ke-5.
Jacksonkr

Jawaban:

1454

Saya menyelesaikan masalah ini saat saya mengetik pertanyaan. Saya pikir saya akan menjawab pertanyaan saya dan meninggalkannya di sini untuk siapa saja yang mungkin menghadapi masalah ini saat menggunakan Xcode 6 beta 4.

Untuk mengatasi masalah ini, Anda harus memilih masing-masing objek kelas kustom Anda di Storyboard (ini termasuk setiap tampilan kustom, bahkan pengontrol tampilan kustom sendiri).

Kemudian dengan objek-objek yang dipilih, buka inspektur identitas dan di bawah "Kelas Kustom" Anda akan melihat opsi Modul. Klik di dalam kotak teks Module, dan tekan enter.

Itu dia! Modul saat ini untuk semua objek kustom saya pasti salah diatur secara internal entah bagaimana dalam Xcode 6 beta 4. Tapi tidak ada indikasi visual tentang ini di inspektur.

Perhatikan bahwa jika menekan enter di dalam kotak teks Module tidak berfungsi, coba pilih panah ke kanan dan pilih secara manual modul Anda saat ini, kemudian kosongkan kotak teks dan tekan enter. Anda juga dapat mencoba menekan enter di dalam kotak teks kelas (meskipun ini biasanya untuk menyelesaikan masalah yang berbeda).

Berikut ini adalah gambar untuk membuat segalanya lebih jelas: masukkan deskripsi gambar di sini

Epic Byte
sumber
70
Bagi saya, mengklik di dalam "Modul" dan menekan enter tidak bekerja secara konsisten, tetapi memilih bidang "Class" (dan menekan enter) selalu berhasil.
Imre Kelényi
2
Bagi saya, target sudah ditetapkan dengan benar, tetapi kelas masih belum muncul di IB. Namun, saya perhatikan bahwa "Lokasi" file menunjukkan jalur "Relatif terhadap Proyek" dan bukan "Relatif ke Grup". Menghapus referensi file DAN grup dan menambahkannya kembali di root proyek bekerja untuk saya.
knl
8
Wow. Terima kasih untuk ini, saya tidak berpikir saya akan sampai di sana jika tidak. Ini memperbaiki masalah yang mulai terjadi setelah saya menambahkan @objc(...)ke salah satu kelas Swift saya.
ndbroadbent
12
Masalah ini masih ada di XCode 7.2. Solusi ini berhasil.
Tom Fast
3
Ini masih menjadi masalah di Xcode 8.3.1 ... Sayang sekali
Sepehr Behroozi
99

Terkadang Xcode terjawab customModule="AppName" customModuleProvider="target"

Untuk memperbaikinya, buka storyboard sebagai kode sumber dan ganti baris ini:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
sceneMemberID="viewController">

untuk ini:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
 customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">
ChikabuZ
sumber
7
Sebenarnya dalam kasus saya, saya harus menghapus customModuleProvider, maka kesalahan hilang.
Maciej Swic
3
Guillermo, masih terjadi di Xcode pada akhir Maret!
Ed Manners
3
@MaciejSwic Menghapus customModuleProvidermelakukannya untuk saya juga, terima kasih!
Sakiboy
1
bagaimana dengan file xib?
SleepsOnNewspapers
7
Masih terjadi ... hal-hal seperti ini yang membuat saya ingin menangis :(
Luke
72

Saya memiliki masalah ini setelah mengganti nama kelas cepat. Memecahkannya dengan menggunakan direktif @objc:

@objc(ForumTopicListViewController) class ForumTopicListViewController
pengguna1760527
sumber
4
Ini memperbaikinya bagi saya, saya miliki @objc class Xdan berubah untuk @objc(X) class Xbekerja.
Joe
1
Anda juga dapat mencoba menghapus data turunan Anda lihat stackoverflow.com/questions/24039932/...
user1760527
Mengalami masalah ini setelah mengganti nama kelas ViewController default dari templat proyek Single View. Saya ingin tahu sihir apa yang digunakan sehingga @objc()arahan tidak diperlukan untuk kelas ViewController 'asli' ...
Berend Klein Haneveld
Saya pergi ke sisi yang berlawanan. Saya telah menentukan nama modul dalam file Storyboard tetapi juga menambahkan arahan @objc.
WeZZard
1
TIDAK bekerja untuk saya. :( Baik adalah solusi dari Modul nama kerja.
mythicalcoder
64

Proyek dengan Banyak Target

Dalam kasus saya, saya sedang mengerjakan Proyek dengan banyak Target dan masalah "warisan dari Target" tidak dicentang. Memilih "inherit from target" menyelesaikan masalah saya

masukkan deskripsi gambar di sini

Muhammad Nayab
sumber
Terima kasih telah memposting ini. Memecahkan masalah yang saya lihat dengan sangat cepat.
JaredH
Saya memiliki situasi yang serupa. (XCode 9.4.1) Saya membuat aplikasi iOS yang disebut FilesTestA, dengan UIView khusus bernama MxFileView (yang terdiri dari MxFileView.swift dan MxFileView.xib). Lalu saya menambahkan target lain: widget Today ("FilesTestAWidget"). Solusi untuk menggunakan MxFileView dalam widget: (1) class = "MxFileView"; (2) centang "Modul Warisan dari Target" (atau hapus centang dan masukkan secara manual "FilesTestAWidget"); (3) di target aplikasi, pastikan bahwa MxFileView.swift dan MxFileView.xib menyertakan FilesTestAWdapat di Keanggotaan Target mereka.
Kenster999
Ini terjadi pada saya pada proyek baru dari templat default di Xcode 10.1 (satu target aplikasi iOS, dan 2 target uji). Kotak centang tidak dicentang untuk semua pengontrol tampilan tampilan saya (dan teks placeholder adalah "Tidak Ada"). Setelah melalui dan memeriksa kotak centang untuk setiap pengontrol tampilan kustom di storyboard saya, masalahnya teratasi.
Mason
58

Ini bekerja untuk saya ..

Periksa sumber terkompilasi Anda, apakah file itu (misalnya; ViewController.m) ditambahkan atau tidak, dalam kasus saya file ViewController tidak ditambahkan sehingga memberi saya kesalahan ..

masukkan deskripsi gambar di sini

Maverick
sumber
@CarmenA Anda hanya pernah menambahkan file '.m' ke Compile Sources. Ini benar-benar solusi yang tepat (& hanya) untuk beberapa orang.
Jacksonkr
Saya mencoba beberapa solusi lain tanpa hasil. Ini berhasil. Untuk beberapa alasan aneh satu target kehilangan satu file sumber yang memberi saya cocok.
galactikuh
untuk saya juga .. Terjadi karena beberapa mendapat resolusi konflik
Eldhose
46

Ini dapat terjadi pada Xcode apa pun di atas 6.0. Itu terjadi pada saya setelah mengganti nama beberapa kelas ViewController di proyek Swift (tapi saya kira itu akan terjadi dengan Obj-C juga). Anda hanya perlu membuka pembuat antarmuka, pergi ke Identity Inspector of ViewController yang kelasnya telah diubah namanya, pilih kelas dan tekan Enter. Itu akan menugaskan kembali kelas berganti nama menjadi ViewController yang dipilih dan juga mengatur ulang Nilai Modul yang hilang setelah mengganti nama kelas.

Pembaruan untuk Xcode 8.1 (mungkin juga 8.0):

Xcode 8.1 hanya macet. Sederhana dan mengganggu hanya crash dan tidak mencetak apa pun. Saya mengejar kecelakaan hantu selama satu jam hanya untuk mengetahui bahwa itu adalah hal yang sama - kelas yang tidak ditugaskan di IB. Jika Anda mendapatkan crash phantom, periksa IB untuk kelas yang belum ditetapkan terlebih dahulu.

jovanjovanovic
sumber
Terima kasih untuk ini. tampaknya mengikuti saran Anda menyebabkan Xcode memperbarui modul (di bawah kelas dalam IB) dari Tidak Ada ke Sekarang. Saya pikir masalahnya adalah bahwa hanya memasukkan nama tanpa memukul masuk gagal memicu pembaruan modul oleh Xcode.
rockiesGrizzly
Ini berhasil untuk saya. Saya secara tidak sengaja mengganti nama kelas controller, jadi jelas tidak ada lagi ketika view controller dimuat.
Litehouse
32

Terkadang controller yang Anda sediakan kehilangan target keanggotaannya dari aplikasi saat ini. Dalam hal itu, menekan enter pada bidang "Modul" tidak akan melakukan apa-apa. Pergi ke controller dan pastikan itu memiliki keanggotaan target yang ditetapkan ke aplikasi saat ini.

Furqan Khan
sumber
Ini adalah masalah bagi saya juga - beberapa target mengarah ke file kelas tanpa sengaja tidak termasuk dalam target yang saya bangun.
Ryan Kreager
Saya menggabungkan file dan melewatkan ini di salah satu target saya, jawaban yang bagus
Benjamin Jimenez
Bagus, menggabungkan pbx memecahkan nilai-nilai keanggotaan target.
sistem
32

Mengaktifkan Inherit Module From Targetmengambil modul target yang benar. Itu memecahkan masalah.

masukkan deskripsi gambar di sini

Arnab
sumber
Konfirmasi. Ini membantu saya memecahkan masalah.
Chris8447
Saya biasanya memiliki masalah ini ketika saya mengubah tampilan controller dari Objective-C ke Swift. Saya mengetik ulang surat terakhir dan tekan Enter. Seharusnya melakukan trik juga.
DevNebulae
30

Jawaban saya: setel Modul kustom sama dengan nama Pod kustom (dalam contoh saya - nama kelas kustom) seperti pada tangkapan layar terlampir

Solusi ini untuk kasus tertentu : untuk kelas tampilan kustom dari kerangka Pod (atau Carthage ).

Infrastruktur: XCode8, Swift3

masukkan deskripsi gambar di sini

Tamara
sumber
18

Saya memperbaikinya dengan melakukan persis kebalikan dari yang disarankan ChikabuZ (terima kasih telah menunjukkannya). Di file storyboard, temukan ini:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">

dan ganti dengan ini:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" sceneMemberID="viewController">

Saya tidak bisa percaya berapa jam saya kehilangan bug di kompiler Swift dan Xcode 6

Orlin Georgiev
sumber
17

Memilih yang tepat Moduleuntuk saya, Custom Classsaya memecahkan masalah ini.

Ini dia :

masukkan deskripsi gambar di sini

Roy
sumber
13

Saya menghadapi masalah ini di Xcode 8 , untuk menyelesaikannya saya harus memodifikasi storyboard di editor teks.

Secara umum, cari kontrol Anda dan hapus customModuledan customModuleProviderdari entitas kontrol.

Melakukan tipuan untuk saya.

George Maisuradze
sumber
Hah!
Retasan
10

Saya memiliki masalah yang sama.

Dalam kasus saya, Xcode tidak menambahkan kelas khusus saya ke: Target> Build Phase> Compile Sources.

Jadi saya sarankan Anda untuk memverifikasi apakah CustomClass.m Anda ada di sana.

masukkan deskripsi gambar di sini

Saya harap ini membantu Anda.

rcmstark
sumber
Inilah yang terjadi pada saya, dan untungnya menemukan jalan keluar! Saya datang ke sini untuk menjawab tetapi Anda yang pertama. Terima kasih!!!
Gabriel Piffaretti
9

Saya menghadapi masalah ini dalam Xcode 6.1 ketika saya menghapus Main.storyboard, LaunchScreen.xibfile dan ViewControllerkelas default dari proyek saya.

Saya memperbaikinya dengan menghapus Launch Screen Filedan Main Interfaceentri dariInfo.plist

Vinay Jain
sumber
9

Periksa apakah kelas Anda memiliki Keanggotaan Target yang benar .

Jakub Truhlář
sumber
8

Saya mencari Google di mana-mana untuk ini. Tidak ada jawaban yang berfungsi untuk saya sampai saya bertemu 1 pria yang meminta saya untuk memindahkan folder proyek saya ke desktop. Itu hanya bekerja secara otomatis. Rupanya jika Anda memiliki Anda memproyeksikan folder ke banyak folder, XCODE sebenarnya rusak.

VBaarathi
sumber
Saya mendapatkan masalah ini di Xcode 7 beta 5 lagi sejak saya mendapatkannya di Xcode 6 sebelumnya. Kali ini, metode ini bekerja untuk saya.
Jake Lin
1
Di studio visual ada masalah serupa. Tapi di sana, kami mendapat pesan peringatan yang jelas mengatakan jalannya terlalu panjang dan hal-hal tidak dapat ditambahkan atau diedit. Tidak yakin apakah ini hal yang sama dengan XCODE, tetapi setelah episode itu saya menyimpan semua proyek saya baik dalam dokumen atau desktop dan tidak pernah memiliki masalah ini lagi. Saya bahkan memberikan saran ini kepada seseorang yang menggunakan Xamarin Studio dan itu juga berhasil untuk mereka ...
VBaarathi
7

Langkah-langkah ini bekerja untuk saya.

1) Hapus Data Berasal.
2) Hapus file .h dan .m
3) Buat lagi file .h dan .m

ARWIN
sumber
Ini juga bekerja untuk saya. Saya bahkan membuatnya bekerja tanpa membersihkan data turunan.
jaytrixz
Ini berhasil bagi saya, terima kasih banyak Arwin, Tapi tetap saya tidak mengerti mengapa itu meningkatkan kesalahan seperti itu karena saya tidak memodifikasi apa pun di kelas atau di IB sebelumnya
Kirtikumar A.
7

Saya memecahkan ini dengan membuka file storyboard saya sebagai kode sumber dan menggunakan perintah-F untuk mencari kelas saya yang tidak diketahui dan menghapus kelas kustom yang terkait dengannya.

Wraithseeker
sumber
6

Apa yang dikatakan @gfrs benar, Anda perlu mengatur Modul. Namun saya pernah mengalami masalah bahwa kelas saya tidak terdaftar dalam Classdropdown. Akhirnya saya menghapus file cepat, memulai kembali Xcode dan membuat ulang file. Akhirnya kelas terdaftar dan dapat digunakan di Storyboard.

Lihat juga jawaban ini , yang sepertinya memecahkan masalah 'nyata' yang saya temui.

Bouke
sumber
Menghapus dan menambahkan kembali file kelas berhasil untuk saya. Terima kasih!
Nicolas Miari 815
6

Saya memecahkan masalah ini dengan mengetikkan nama Modul (sayangnya daftar drop tidak akan menunjukkan apa-apa ...) di Kelas Kustom inspektur identitas untuk semua controller View dan pandangan.

Anda mungkin juga perlu menunjukkan penyedia target. Untuk mencapai tujuan ini, Anda dapat membuka storyboard dalam mode kode sumber dan menambahkan atribut "customModuleProvider" di braket ViewController dan sudut siku.

Teng Long
sumber
6

Solusi saya (Xcode 8.1 Swift 3.0):

Xxx kelas tidak dikenal dalam file Interface Builder.

Buka StoryBoard sebagai Source Code dan cari xxx . Hapus atribut yang berisi nilai xxx . Bangun dan Lari.

ibrahimyilmaz
sumber
WTF? Ini sangat penting bagi saya, terima kasih. Saya harus menghapuscustomModule="" customModuleProvider=""
Dan Rosenstark
1
Jika kami mencoba menerbitkan aplikasi ke app store yang mengandung kesalahan seperti ini, aplikasi tersebut ditolak tanpa pikir panjang.
ibrahimyilmaz
Saya tidak setuju. Saya baru saja mengirimkan bangunan yang harus saya modifikasi dengan cara ini ke TestFlight dan siap untuk Pengujian Beta ... kita akan melihat apa yang terjadi di toko aplikasi yang sebenarnya, tetapi itu adalah IMO bug IB. Terima kasih!
Dan Rosenstark
4

Dalam kasus saya, saya menambahkan bendera -ObjCke Other Linker Flagsdalam pengaturan proyek untuk membuatnya berfungsi. Saya juga mencoba dengan -all_loadflag dan itu bekerja dengan baik juga.

masukkan deskripsi gambar di sini

Rostyslav Druzhchenko
sumber
3

Dalam kasus saya, kelas yang dirujuk di Storyboard / xib tidak memiliki set Keanggotaan Target .

Untuk memperbaikinya, berikan kelas itu .hdan .majukan Keanggotaan Target yang sama dengan kelas Anda yang lain.

Tidak ada keanggotaan target yang ditetapkan.

pkamb
sumber
Ini adalah masalah saya, tetapi ketika mencoba berbagai solusi saya menyebabkan masalah yang diperbaiki oleh jawaban Epic Byte. Anda harus memiliki kode sumber di target yang Anda buat, tetapi juga di IB Anda perlu mengatur pengontrol tampilan untuk menjadi bagian dari target saat ini.
SafeFastExpressive
Keanggotaan target adalah masalah saya juga, mencari kemana-mana, tetapi berkat jawaban ini saya bisa menyelesaikannya.
Borzh
3

Solusi saya adalah menghapus @objc dari definisi kelas Custom.

DenisKirillov
sumber
2
Beberapa contoh dengan penjelasan akan sangat bagus.
Nilambar Sharma
2

Saya menghadapi masalah ketika saya memindahkan storyboard dari proyek Swift ke proyek Objective-c, memperhatikan jawaban vvkuznetsov , ternyata dua proyek menggunakan pengidentifikasi yang sama. I "Produk -> Bersihkan" dan ketuk tombol Enter pada bidang teks Modul dan Kelas. masalah itu hilang.

xhg
sumber
2

Saya memperbaiki ini sesuai dengan saran Laura tetapi saya tidak perlu membuat ulang file.

Menggunakan XCode 4, di Project Navigator, pilih file .m yang berisi kelas yang dikeluhkannya

Pergi ke View-> Utilities-> Show File Inspector (ini akan menunjukkan File Inspector ke kanan, dengan info .m-file)

Buka bagian Keanggotaan Target dan pastikan target Anda dipilih untuk file .m ini

Ketika saya menambahkan file .m saya ke proyek saya, itu tidak menambahkannya ke target default saya untuk beberapa alasan dan itu menyebabkan saya mendapatkan kesalahan yang Anda sebutkan.

Jignesh Kalantri
sumber
2

Masalah saya adalah kesalahan pengguna. Saya memiliki UIView generik di storyboard saya dan di bagian Kelas Kustom Inspektur Identitas, saya tidak sengaja mengubah nama dari UIView menjadi omong kosong.

Yang diperlukan untuk memperbaikinya adalah mengubahnya kembali ke UIView.

Skuter
sumber
Saya melakukan hal yang sama, tetapi saya tidak sengaja menambahkan nama Pengendali Tampilan Kustom ke bagian kelas kustom tampilan root ViewControllers. Jadi saya mencari untuk melihat mengapa View Controller tidak dapat ditemukan ketika itu adalah tampilan root sepanjang waktu.
TMin
1

Apa yang hanya bekerja untuk saya sebenarnya menambahkan nama modul ke file xib ...

Sooo, file xib terlihat seperti ini:

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

Solusi yang mengerikan menurut saya, tapi itu seharusnya bagaimana Apple ingin kita melakukannya sekarang.

Pertanyaan ini menunjukkan 3 kemungkinan pekerjaan di beta 4 ... tampaknya Apple tidak terlalu membantu dalam situasi ini menurut beberapa orang karena mereka menyebutnya "Bekerja sebagaimana dimaksud."

SH
sumber
1

Saya memiliki masalah yang sama dengan Xcode Versi 6.1 (6A1052d). Saya pikir masalah muncul jika Anda mengganti nama Proyek Aplikasi / Xcode Anda.

Solusi saya adalah menambahkan nama modul di pembangun antarmuka secara manual.

patrick
sumber
1

Saya mengalami masalah ini setelah saya menambahkan target baru, kemudian membuat kelas baru menggunakan dialog 'File Baru' tetapi tidak sengaja gagal memeriksa target baru serta target asli dalam dialog pembuatan, sehingga objek hanya ditambahkan ke saya target asli. Solusinya adalah menghapus file sumber (hanya menghapus referensi) lalu menambahkannya kembali menggunakan 'Tambah File', kali ini memeriksa kedua target.

JulianSymes
sumber