Kesalahan "Kelas tidak dikenal <MyClass> dalam file Interface Builder" saat runtime

260

Meskipun Interface Builder mengetahui adanya MyClass, saya mendapatkan kesalahan saat memulai aplikasi.

Ini terjadi ketika MyClassmerupakan bagian dari perpustakaan, dan tidak terjadi jika saya mengkompilasi kelas secara langsung dalam target aplikasi.

jhoule
sumber
Bagaimana Anda menautkan ke perpustakaan?
Elise van Looij
Saya menggunakan subproyek dependen, dan melakukan drag'n'drop dari produk subcode Xcode ke fase build "Link Binary With Library" target saya saat ini.
jhoule
Jika kelasnya dari CocoaPods, ini mungkin membantu github.com/CocoaPods/CocoaPods/issues/491 .
Protocole
Mungkinkah terkait? stackoverflow.com/a/24924967/511299
Sunkas

Jawaban:

222

Meskipun kesalahan " Kelas Tidak Dikenal MyClass dalam file Interface Builder. " Dicetak saat runtime, masalah ini tidak ada hubungannya dengan Interface Builder, melainkan dengan linker, yang tidak menghubungkan kelas karena tidak ada kode yang menggunakannya secara langsung.

Ketika data .nib (dikompilasi dari .xib) dimuat saat runtime, MyClassdireferensikan menggunakan string, tetapi linker tidak menganalisis fungsionalitas kode, hanya keberadaan kode, sehingga tidak tahu itu. Karena tidak ada file sumber lain yang mereferensikan kelas itu, linker mengoptimalkannya dari keberadaan ketika membuat executable. Jadi ketika kode Apple mencoba memuat kelas seperti itu, ia tidak dapat menemukan kode yang terkait dengannya, dan mencetak peringatan.

Secara default, target Objective-C akan memiliki -all_load -ObjCflag yang ditetapkan secara default, yang akan menyimpan semua simbol. Tapi saya sudah mulai dengan target C ++, dan tidak punya itu. Namun demikian, saya menemukan jalan keluarnya, yang membuat linker tetap agresif.

Retas yang awalnya saya gunakan adalah untuk menambahkan rutin statis kosong seperti:

+(void)_keepAtLinkTime;

yang tidak melakukan apa-apa, tetapi saya akan memanggil sekali, seperti:

int main( int argc, char** argv )
{
   [MyClass _keepAtLinkTime];
   // Your code.
}

Ini akan memaksa linker untuk menjaga seluruh kelas, dan kesalahannya hilang.

Seperti yang ditunjukkan jlstrecker di komentar, kita tidak benar-benar perlu menambahkan _keepAtLinkTimemetode. Cukup menelepon yang sudah ada, seperti:

   [MyClass class];

melakukan trik (selama Anda berasal dari sebuah NSObject).

Tentu saja, Anda dapat memanggil ini di lokasi mana pun dari kode Anda. Saya kira itu bahkan bisa dalam kode yang tidak terjangkau. Idenya adalah untuk membodohi penghubung ke dalam pemikiran yang MyClassdigunakan di suatu tempat sehingga tidak begitu agresif dalam mengoptimalkannya.

Xcode 6.3.2 & Swift 1.2

Definisi tampilan yang cepat. Pastikan untuk mengganti init(coder aDecoder: NSCoder). Definisi obyektif-C pengontrol tampilan. Dan, sebuah pena di pohon pir.

Tambahkan Nama Modul ke inspektur detail Nib tempat Anda memilih kelas Anda.

jhoule
sumber
2
Data .xib tidak dimuat saat runtime. Kompiler IB mengkompilasi xib ke nib; nib adalah apa yang dimuat saat runtime.
Peter Hosey
19
Anda tidak perlu memodifikasi MyClass. Panggil saja metode yang diwarisi darinya NSObject, seperti +class.
jlstrecker
10
Meskipun ini bukan Xcode 4 ketika pertanyaan asli diposting, hal berikut ini tampaknya masih tepat. Di Xcode 4 alih-alih menambahkan beberapa metode dummy untuk menghilangkan kesalahan, Anda dapat memeriksa semua target yang diperlukan MyClass.mdi bagian Keanggotaan Target di Inspektur File.
adubr
51
Kemungkinan lain akhir-akhir ini adalah bahwa MyClass.m mungkin tidak berada dalam fase pembuatan Sumber Kompilasi Anda. Ini bisa terjadi jika Anda menyeret MyClass.h / m ke proyek Anda, daripada membuatnya menggunakan File Baru.
Steven Fisher
6
@ JoshBruce, bisakah Anda menjelaskan solusi Swift? Saya tidak begitu mengerti.
Ryan Bobrowski
183

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.

Menepuk
sumber
Memang benar bahwa kadang-kadang kesalahan tautan disebabkan karena tidak mengkompilasi file Anda di target Anda. Apa yang Anda gambarkan adalah cara untuk mengontrol target yang dikaitkan dengan file. Sayangnya, file saya sudah menjadi bagian dari target saya, tetapi saya masih memiliki masalah tautan. Ini mungkin karena pustaka saya adalah C ++ (berlawanan dengan Objective-C), yang memiliki flag-flag linker standar yang berbeda (lihat posting oleh Alasdair Allan dan Sijo di atas).
jhoule
5
Saran ini bekerja untuk saya, meskipun sedikit berbeda, karena kotak centang "Keanggotaan Target" saya sudah dicentang. Saya tidak mencentangnya dan membangun kembali, tetapi kemudian pesan kesalahan berubah untuk menunjukkan nama kelas baru saya. Periksa ulang kotak dan bangunan lagi, semuanya sekarang berfungsi. Jauh lebih mudah daripada menghapus file cache!
electromaggot
Solusi hebat melalui Xcode UI. @electromaggot, Xcode mungkin bingung ketika Anda menambahkan kelas secara manual, jadi Anda mungkin perlu menambahkan lebih dari satu file.
Gonen
Ini solusi bagi saya juga. Saya telah menyeret beberapa file kelas dari proyek lain, dan file-file kelas itulah yang menimbulkan pengecualian.
hairbo
1
Saya menghapus file dari proyek saya kemudian menambahkan file yang sama kembali kemudian dan ini menyelesaikan masalah.
MindSpiker
70

Ini tidak benar-benar ada hubungannya dengan Interface Builder, yang terjadi di sini adalah simbol tidak dimuat dari perpustakaan statis Anda oleh Xcode. Untuk mengatasi masalah ini, Anda perlu menambahkan -all_load -ObjCbendera ke Other Linker Flagstombol Pengaturan Proyek (dan mungkin Target).

Karena Objective-C hanya menghasilkan satu simbol per kelas, kita harus memaksa linker untuk memuat anggota kelas juga dengan menggunakan flag -ObjC, dan kita juga harus memaksa dimasukkannya semua objek kita dari perpustakaan statis kita dengan menambahkan -all_loadflag linker. Jika Anda melewatkan bendera ini cepat atau lambat Anda akan mengalami kesalahan unrecognized selectoratau mendapatkan pengecualian lain seperti yang Anda amati di sini.

Alasdair Allan
sumber
5
Saya menemukan bahwa hanya -ObjCbendera saja yang diperbaiki dalam kasus saya.
Kekoa
5
@Kekoa itu karena versi Xcode Anda (LLVM) lebih baru daripada yang ditulis oleh pria ini. Saat ini, menggunakan -ObjCcukup baik untuk memperbaiki masalah.
Hingga
ini hanya membantu saya. Selama kompilasi itu menunjukkan masalah terkait kerangka kerja yang juga diselesaikan setelah saya mengimpor semua kerangka kerja.
Vaibhav Saran
Bendera -ObjC sendiri memperbaiki masalah saya. Saya benar-benar mendapat kesalahan karena memiliki atribut all_load di iOS7.
Sushma Satish
Menggunakan -all_load -ObjC dapat menyebabkan peningkatan ukuran produk yang tidak perlu. masalah ini terjadi dengan file kategori juga dalam kerangka saja.
Ali Amin
26

Saya memang mengalami masalah ini hari ini menggunakan Swift.

Saya mengubah kelas Model.h + Model.mmenjadi a Model.swift. Objek ini digunakan di Interface Builder dengan class = Model.

Segera setelah saya mengganti objek, kelas tidak bisa lagi dimuat.

Apa yang harus saya lakukan adalah mengubah referensi kelas di IB dari:

Class = Model
Module = 

untuk

Class = Model
Module = <TARGETNAME>

Anda akan menemukan <TARGETNAME>di pengaturan build. Itu juga nama yang muncul di Header Swift yang Anda hasilkan:#import "TARGETNAME-Swift.h"

Besi
sumber
1
Ini sepertinya jawaban yang benar. Kecuali seseorang dapat mengatakan sebaliknya, ini harus ditandai sebagai benar.
Bjørn Ruthberg
1
Jawaban yang bagus terima kasih. Bagi saya Modulenama itu ada di sana di drop down. Itu adalah nama aplikasi saya.
ChrisH
Ini bekerja untuk saya. Untuk masalah saya, <TARGETNAME> yang disebutkan dalam jawaban Anda, adalah nama kerangka kerja yang berisi kelas.
Tyler Long
Saya sampai pada kesimpulan saya sendiri ini juga kesalahan yang saya dapatkan dan bersedia memposting temuan saya ketika saya melihat posting Anda. Saya benar-benar melihatnya tetapi melewatinya, karena banyaknya jawaban dan kebisingan di sekitarnya. Saya pikir jawaban Anda dapat ditingkatkan dengan beberapa tangkapan layar untuk membedakan jawaban Anda dari yang lain. Saya yakin akan menangkapnya jika memang begitu. Terima kasih banyak, karena mempostingnya di sini. Anda mendapat upvote saya.
jvarela
Untuk AppDelegate, saya bisa memperbaikinya di Interface Builder UI. Untuk kelas khusus elemen UI dalam jendela, Interface Builder UI tidak akan membiarkan saya mengatur kelas dan modul kustom. Saya harus melakukan hal berikut: (1) Buka file .xib sebagai "Kode Sumber" (klik kanan di atasnya). (2) Tambahkan atribut "customModule = <TARGETNAME>" di sebelah atribut customClass.
Poulsbo
20

Pergi ke "ProjectName", klik di atasnya, dan kemudian pergi ke tab "Build phases", dan kemudian klik pada "kompilasi sumber", dan kemudian klik tombol "+", sebuah jendela akan muncul, pilih "MyClass." m "file dan kemudian klik" add ",

Bangun Proyek dan Jalankan, masalahnya pasti akan terselesaikan

Subbu
sumber
ya, saya belum mencentang SEMUA kotak target yang ingin saya tambahkan ke kelas yang baru diimpor. Terima kasih!
Joel Balmer
Iya! File VC saya hilang dari proyek Target.
Sebastian Dwornik
19

Ini adalah masalah cache Xcode4, hapus saja semua folder di bawah / Users / your_user / Library / Dukungan Aplikasi / iPhone Simulator / 4.3 / Aplikasi /

Juga jika Anda memiliki masalah pengujian yang sama pada iPhone Anda, hapus aplikasi lama sebelum menjalankannya ...

Semoga berhasil. Pascual

Ignacio Pascual
sumber
8
Di Pengaturan Bangun Proyek Anda perlu menambahkan flag "-all_load -ObjC" ke kunci "Other Other Linker Flags". Ini bukan masalah khusus Xcode 4, dan pada kenyataannya umumnya tidak ada hubungannya dengan Interface Builder.
Alasdair Allan
Solusi ini sudah disarankan pada Januari 2010 (lihat di atas).
jhoule
6
Ya - cara yang lebih mudah untuk melakukannya adalah hanya membuka Simulator iOS dan dari menu pilih 'Reset Konten dan Pengaturan'
RanLearns
Atau Anda dapat melakukan apa yang saya lakukan dan hanya menghapus aplikasi yang dimaksud dari layar awal Simulator. Saya memiliki pesan kesalahan yang sama, tetapi merujuk pada delegasi aplikasi lama.
spstanley
16

Terkadang IBuilder 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
Menggunakan Xcode 6.3 (6D570) segera setelah saya menjalankan pengaturan kembali ke yang asli (buruk). Bug? Saya mencoba untuk memasukkan file cepat dalam proyek Objective C.
addzo
Pada XCode 6.4, cukup tambahkan customModuleProvider = "target" di kode sumber storyboard, di bawah viewcontroller yang diinginkan, perbaiki masalahnya.
Amro Shafie
Saya bisa menyelesaikan masalah saya dengan adil customModule="MyFrameworkName". Besar +10
Stan
Sebenarnya, masalah saya adalah kebalikannya, saya ingin menghapus CustomTaget tetapi Xcode tidak mengubah file sumber xib, Jadi saya harus menghapus customModule = "AppName" customModuleProvider = "target" untuk membuatnya berfungsi.
Adriana
14

Kasus saya - Mencoba menggunakan Kelas dari kerangka kerja cepat dalam proyek c tujuan saya, saya mendapatkan kesalahan ini. Solusi adalah menambahkan Modul (kerangka kerja cepat) dari kelas di Interface builder / Storyboard seperti yang ditunjukkan di bawah ini. Tidak ada lagi

masukkan deskripsi gambar di sini

Dhilip
sumber
2
Saya menggunakan kerangka kerja Swift dalam proyek Swift yang diinstal oleh CocoaPods. Metode ini berhasil. Dan nama modul adalah nama kerangka kerja.
JsW
1
Ini bekerja dengan sempurna. Perlu mengapa modul itu dihapus ??
iSrinivasan27
Berfungsi sempurna dengan masalah kerangka kerja cocoapod ... pujian untuk Anda untuk jawaban sempurna ...
jayant rawat
13

Pergi ke Build Phases-> Compile Sources dan tambahkan file .m baru Anda.

Jackie Lee
sumber
Yap, setelah menambahkan file baru dari proyek sebelumnya ke proyek XCode 4.5, menambahkan file .m ke daftar Compile Sources menyelesaikannya dengan pasti. Menambahkan "-all_load -ObjC" tidak berfungsi dalam kasus saya, meskipun tidak ada salahnya.
whyoz
13

Dalam kasus saya itu menunjukkan kesalahan untuk kelas yang bahkan tidak ada! Saya curiga itu adalah sesuatu yang dibakar dalam file storyboard. Jika Anda tidak mengenali file kelas dalam kesalahan coba ini:

1) buka proyek Anda dengan luhur atau editor bagus lainnya. Cari kelas yang dirujuk. 2) hapus seluruh bit yang mengatakan

customClass="UnrecognizedClassName"

3) simpan. 4) kembali ke xcode dan bersihkan proyek, dan coba jalankan sekarang.

bekerja untukku.

masukkan deskripsi gambar di sini

smileBot
sumber
Saya menggunakan aplikasi OSX TextEdit. Ini bekerja dengan baik untuk operasi ini. Pastikan untuk menutup proyek Anda terlebih dahulu dan tutup Xcode.
TJ
Itu juga membantu. Saya memiliki lebih dari satu objek dengan customClass yang sama, saya mungkin mengklik tampilan bukan controller dan menetapkan nama yang sama.
Mc
1
Ini juga solusi untuk masalah yang saya temui; Saya sebelumnya memasukkan nama kelas parsial dan entah bagaimana storyboard itu diselamatkan dengan cara itu (misalnya customClass="MyCla"). Daripada menghapus tugas kelas kustom, itu bijaksana bagi saya untuk hanya menempatkan di kelas saya bermaksud untuk menggunakan di tempat pertama :)
dave
9

Saya hanya ingin menambahkan jawaban ini karena sebagian besar jika tidak semua jawaban di sini berasumsi bahwa kelas tersebut benar-benar ada .. hanya saja linker / compiler terlalu bodoh untuk melihatnya .. dengan demikian jawabannya berputar di sekitar baik mengingatkan linker ke keberadaan dari kelas atau membuat peretasan untuk 'memaksa' ada itu ..

masalah saya terjadi ketika pesan ini sebenarnya berbicara tentang kelas yang tidak ada .. jadi contohnya adalah saya kembali ke revisi git lama yang tidak memiliki pengetahuan tentang kelas tertentu .. namun kompiler mengeluh bahwa kelas tersebut tidak ada ' t ada ..

larutan?

  • Nuke semuanya! pertama-tama hapus semua file build, dll dengan menghapus semua konten dalam direktori ini ~ / Library / Developer / Xcode / DerivedData
  • hapus aplikasi dari ponsel itu sendiri (dan kosongkan konten simulator jika Anda menggunakan simulator)

Anda harus baik untuk pergi setelah itu

abbood
sumber
2
Tidak dapat memberi ini +1 dengan cukup, memperbaiki masalah saya. Masalah saya persis sama dengan file yang sudah dihapus namun peringatan masih muncul saat dikompilasi.
Brett
Di Storyboard Anda harus mengisi Identifier. Kadang-kadang saya menulisnya di bidang "Kelas" (di Inspektur Identitas) karena kesalahan. Jadi kompiler mengeluh dengan alasan bahwa Kelas tidak ada!
Vincent
9

Cara terbaik untuk menghapus kesalahan adalah: 1) Pilih File Kelas (.m) 2) Di bawah " Keanggotaan Target ", "centang" entri nama Proyek

Amit B
sumber
Ini bekerja. Saya sedang mengembangkan pod dan untuk beberapa alasan perintah install pod menerapkan target yang salah untuk satu file kelas tertentu. Itu diterapkan pada bundel sumber daya yang saya miliki. Konfigurasi yang benar adalah Pods- <project-title> - <pod-title>
krosullivan
Ini tidak berhasil untuk saya. Keanggotaan target sudah benar, tetapi kesalahan terus terjadi.
Kokodoko
8

Saya memperbaikinya dengan menyalin teks dari class.h dan .m saya, menghapus file-file kelas dari proyek, dan membuat file class.h dan .m baru dengan nama yang sama menggunakan "Tambah File". Lalu saya menempelkan kode kembali ke file baru, dan semuanya bekerja dengan baik. Entah bagaimana file tidak ditautkan dengan benar ketika mereka dibuat. Saya tidak perlu menggunakan flag tautan setelah itu.

Laura
sumber
1
ketika saya pertama kali membuat file saya tidak punya .m pada akhirnya. Saya mencoba mengubah nama file dan menambahkannya kembali, namun saya masih harus menghapus dan membuat ulang file sebelum xcode senang.
odyth
File Anda mungkin bukan bagian dari target Anda. Menambahkan kembali kemungkinan berakhir dengan kotak centang default di target yang tepat.
jhoule
1
Solusi ini juga berfungsi untuk saya, tetapi saya memastikan 100% bahwa sebelum saya menghapus kelas pertama (.h + .m), saya memeriksa bahwa itu adalah bagian dari target saya. Itu bukan masalah bagi saya. Seperti Laura, saya baru saja menghapus kelas dan membuatnya lagi (dengan nama yang berbeda), dan itu berfungsi dengan baik, tanpa ada solusi lain di halaman ini.
Nate
7

SAYA AKHIRNYA memperbaiki ini, saya lupa menambahkan kode berikut ke file .m saya:

@implementation MyTableViewCell

@end

Jadi itu disebabkan karena saya telah membuat placeholder @interface untuk sel tabel saya, yang memiliki koneksi ke elemen dalam file .xib, tetapi ada bug di Interface Builder di mana jika tidak ada @ implementasi yang ditentukan untuk kelas, itu tidak dapat menemukannya.

Saya telah melalui semua langkah dari forum lain untuk melihat .xib sebagai sumber dan melihat MyTableViewCell meskipun saya telah berkomentar keluar dari kode saya. Saya telah mencoba mengatur ulang simulator. Saya bahkan mencoba memecah semua kelas saya menjadi file terpisah dengan nama yang sama dengan antarmuka, tetapi tidak ada yang berhasil sampai saat ini.

PS dalam pengalaman saya, tidak masalah jika nama file .h / .m berbeda dari nama @interface. Saya memiliki beberapa file yang berisi lebih dari satu @interface dan berfungsi dengan baik.

PPS Saya memiliki penjelasan yang lebih terperinci tentang mengapa UITableViewCell dan UICollectionViewCell menyebabkan kesalahan ini di https://stackoverflow.com/a/22797318/539149 bersama dengan cara mengungkapkannya pada waktu kompilasi menggunakan registerClass: forCellWithReuseIdentifier :.

Zack Morris
sumber
6

Ini terjadi karena .xib telah mendapat tautan basi ke Delegasi Aplikasi lama yang tidak ada lagi. Saya memperbaikinya seperti ini:

  • Klik kanan pada .xib dan pilih Open as> Source code
  • Dalam file ini, cari delegasi App lama dan ganti dengan yang baru
SB
sumber
Buka sebagai Kode Sumber tidak ada lagi, tetapi Anda dapat dengan mudah klik kanan, Show in Finder, lalu klik kanan pada file, dan buka di TextEdit. Tentu saja, buat cadangan file sebelum Anda melakukan perubahan;)
Scott Allen
6

cukup tambahkan kode di bawah ini pada awal metode appatoateidfinishlanching appdelegate, maka akan berfungsi dengan baik

[kelas myclass];

iSpark
sumber
5

Saya mencoba ini, dan lainnya, jawaban yang tercantum di situs ini, tidak ada yang mengurutkannya untuk saya. Komentar ini (dari http://www.iphonedevsdk.com/forum/iphone-sdk-development/43330-unknown-class-interface-builder-file.html ) membantu:

Setelah mencari dan mencari dan mencari, saya akhirnya menemukan nama kelas yang dihapus ini disembunyikan dalam file. Saya harus membuka file pembangun antarmuka dalam kode-X, dengan mengklik kanan pada mereka dan memilih 'view as source code'. Kemudian mencari itu muncul dengan

<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.IBCocoaTouchP lu gin</string>
<string>*this was the class name*</string>

Cukup menghapus baris terakhir itu tidak memperbaikinya sayangnya, mengeluh bahwa ada jumlah item yang salah dalam file. Anda harus menghapus baris yang sesuai di bagian baris di atasnya, yang mengacu pada CustomClass.

pengguna776904
sumber
5

Dalam kasus saya, saya memiliki XCode6, file .m kelas yang ditentukan berakhir di tempat yang salah dalam fase pembangunan - Seharusnya di bawah Sumber Kompilasi , tetapi berakhir diSalin Sumber Daya Bundel

Sean Dong
sumber
Terima kasih kepada Anda, saya mulai melihat daftar dan menemukan bahwa file saya baru saja hilang, mungkin ketika saya membuatnya saya tidak menetapkan target dengan benar
schmru
4

Masalah ini sepertinya tidak ketinggalan jaman.

Saya memiliki masalah yang sama dengan Xcode 8 dan menyelesaikannya sama seperti smilebot :

  1. Buka file storyboard Anda sebagai "Kode sumber" di dalam Xcode:

  2. Cari kelas yang dirujuk & hapus seluruh bit yang mengatakan

customClass = "UnrecognizedClassName"

  1. Buka file storyboard Anda sebagai "interfacebuilder - storyboard" lagi dan bangun kembali aplikasi Anda.
jaymgee
sumber
3

Hanya menghapus MyClass.m dan .h dan menambahkannya ke proyek lagi adalah bekerja untuk saya.

yebw
sumber
3

Saya memiliki 'Kelas favourites tidak dikenal di Tombol Antarmuka Pembuat file' dan melacaknya ke adegan buku cerita di mana tombol yang dimaksud memiliki kelas kustom palsu "Tombol favorit" di bidang Kelas di bagian atas Inspektur Identitas. Saya bermaksud untuk meletakkan nilai itu di bidang berikutnya: Label Identitas.

Mengubah ini menjadi "UIButton" memecahkan masalah.

Paul Finger
sumber
2

Saya mengalami ini di Swift.

Memindahkan file .xib ke folder Base.lproj proyek menyingkirkan kesalahan ini.

jaime
sumber
Terima kasih telah berbagi ini, tetapi itu tidak menyelesaikan masalah saya. Inilah solusi yang akhirnya saya temukan: stackoverflow.com/a/28760089/456434
Mazyod
2
Saya memang mengalami masalah itu juga. Namun dalam kasus saya, nama modul yang hilang adalah masalahnya: Lihat < stackoverflow.com/a/29013058/784318 >
Besi
1

Saya mengalami kesalahan ini muncul hari ini ketika mengonversi aplikasi aaLuminate ke Universal di bawah Xcode 4. Aplikasi ini didasarkan pada templat utilitas dan awalnya dibuat di bawah Xcode 3.

Untuk menghemat waktu saya menyalin Tampilan Utama iPhone dan Flipside ke nama-nama yang sesuai pada aplikasi Universal. Saya mengalami kesalahan "Kelas x tidak dikenal dalam file Interface Builder". Dalam kasus saya itu tidak ada dalam file atau target XIB.

Saya juga menyalin file aaLuminate-Info.plist karena alasan lain - ini memiliki kunci lama "Nama basis file file utama" yang disetel ke MainWindow.

Segera setelah saya menghapus kunci ini, masalah itu teratasi!

aarthur
sumber
1

Dalam kasus saya, saya mendapatkan kesalahan ini karena saya mencoba menyelamatkan beberapa pekerjaan dengan membuat proyek baru dan kemudian menghapus beberapa file sumber dan menyalin file sumber dengan nama yang sama dari proyek yang bekerja. Saya juga menyalin file MainStoryBoard saya yang sedang mencari RootViewController saya. Namun, ketika saya telah menghapus RootViewController asli dan kemudian menambahkan di RootViewController dari produk sebelumnya, ternyata operasi Add Files gagal "memeriksa" kotak target seperti yang disarankan di atas. Dengan hanya mengunjungi semua newley yang mengimpor file ".m" dan memastikan bahwa kotak keanggotaan target dicentang, semuanya baik-baik saja. Saya pikir apa yang terjadi adalah file storyboard mencari kelas yang telah "dikecualikan" dari tautan karena keanggotaan target tidak dicentang. Memastikan file yang diperlukan untuk target telah ditentukan dalam keanggotaan target di pengawas file melakukan trik. Pat terima kasih! (Lihat di atas)

Mengenakan
sumber
1

Dalam kasus saya itu karena saya mendeklarasikan subkelas dari subkelas sel UITableView dalam file .h (deklarasi kedua subkelas berada di file .h yang sama), tetapi lupa membuat implementasi kosong dari subkelas kedua di file .m.

jangan lupa untuk mengimplementasikan subkelas dari subkelas yang Anda deklarasikan dalam file .h! kedengarannya sederhana, tetapi mudah dilupakan karena Xcode akan melakukan ini untuk Anda jika Anda bekerja dengan satu kelas per file .h / .m.

sepatu kuda7
sumber
1

Saya memiliki "Kelas tidak dikenal RateView di Interface Builder" di mana RateView adalah subkelas dari UIView. Saya telah menjatuhkan UIView ke adegan Storyboard saya dan mengubah bidang kelas Kustom ke RateView. Tetap saja, kesalahan ini muncul.

Untuk debug, saya mengubah nama kelas saya menjadi RateView2 dan mengubah semua referensi yang cocok kecuali bidang kelas Kustom pada UIView. Pesan kesalahan masih muncul seperti sebelumnya dengan RateView sebagai kelas yang hilang. Ini mengkonfirmasi bahwa pesan kesalahan terkait dengan nilai bidang kelas khusus. Saya mengubah nilai ini ke RateView2 dan pesan kesalahan berubah menjadi "Kelas tidak diketahui RateView2 di Interface Builder". Kemajuan macam-macam.

Akhirnya, saya memeriksa sendiri file kode sumber di Inspektur File. Di sana saya menemukan bahwa file kode sumber (yang telah saya salin dari tutorial) tidak terkait dengan Target saya. Dengan kata lain, ia tidak memiliki Keanggotaan Target. Saya mencentang kotak yang membuat file kode sumber kelas anggota aplikasi target dan pesan kesalahan hilang.

Robert White
sumber
1

Dalam kasus saya, saya telah menghapus kelas yang disebut "viewController" yang tidak menyadarinya dipilih dengan inspektur identitas storyboard (di bawah 'Custom Class' di bagian atas).

Anda hanya perlu memilih kelas yang benar untuk pengontrol tampilan di bidang Kelas Kustom inspektur identitas Anda atau menambahkan kelas baru ke proyek Anda dan memilih yang sebagai Kelas Kustom Anda.

Bekerja untukku!

Tim
sumber
1

Ini membuat saya sedikit gila dan tidak ada saran di atas yang membantu saya menyingkirkan kesalahan. Untungnya saya hanya punya satu objek IB menggunakan kelas jadi saya hanya menghapusnya dan menambahkannya kembali dengan kelas yang sama yang ditentukan. Kesalahan hilang ...

Jdizzle Foshizzle
sumber