Meskipun Interface Builder mengetahui adanya MyClass
, saya mendapatkan kesalahan saat memulai aplikasi.
Ini terjadi ketika MyClass
merupakan bagian dari perpustakaan, dan tidak terjadi jika saya mengkompilasi kelas secara langsung dalam target aplikasi.
cocoa
cocoa-touch
xcode
interface-builder
jhoule
sumber
sumber
Jawaban:
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,
MyClass
direferensikan 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 -ObjC
flag 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:
yang tidak melakukan apa-apa, tetapi saya akan memanggil sekali, seperti:
Ini akan memaksa linker untuk menjaga seluruh kelas, dan kesalahannya hilang.
Seperti yang ditunjukkan jlstrecker di komentar, kita tidak benar-benar perlu menambahkan
_keepAtLinkTime
metode. Cukup menelepon yang sudah ada, seperti: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
MyClass
digunakan 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.
sumber
MyClass
. Panggil saja metode yang diwarisi darinyaNSObject
, seperti+class
.MyClass.m
di bagian Keanggotaan Target di Inspektur File.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.
sumber
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 -ObjC
bendera keOther Linker Flags
tombol 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_load
flag linker. Jika Anda melewatkan bendera ini cepat atau lambat Anda akan mengalami kesalahanunrecognized selector
atau mendapatkan pengecualian lain seperti yang Anda amati di sini.sumber
-ObjC
bendera saja yang diperbaiki dalam kasus saya.-ObjC
cukup baik untuk memperbaiki masalah.Saya memang mengalami masalah ini hari ini menggunakan Swift.
Saya mengubah kelas
Model.h + Model.m
menjadi aModel.swift
. Objek ini digunakan di Interface Builder denganclass = Model
.Segera setelah saya mengganti objek, kelas tidak bisa lagi dimuat.
Apa yang harus saya lakukan adalah mengubah referensi kelas di IB dari:
untuk
Anda akan menemukan
<TARGETNAME>
di pengaturan build. Itu juga nama yang muncul di Header Swift yang Anda hasilkan:#import "TARGETNAME-Swift.h"
sumber
Module
nama itu ada di sana di drop down. Itu adalah nama aplikasi saya.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
sumber
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
sumber
Terkadang IBuilder terjawab
customModule="AppName" customModuleProvider="target"
Untuk memperbaikinya, buka storyboard sebagai kode sumber dan ganti baris ini:
untuk ini:
sumber
customModule="MyFrameworkName"
. Besar +10Kasus 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
sumber
Pergi ke Build Phases-> Compile Sources dan tambahkan file .m baru Anda.
sumber
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
3) simpan. 4) kembali ke xcode dan bersihkan proyek, dan coba jalankan sekarang.
bekerja untukku.
sumber
customClass="MyCla"
). Daripada menghapus tugas kelas kustom, itu bijaksana bagi saya untuk hanya menempatkan di kelas saya bermaksud untuk menggunakan di tempat pertama :)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?
Anda harus baik untuk pergi setelah itu
sumber
Cara terbaik untuk menghapus kesalahan adalah: 1) Pilih File Kelas (.m) 2) Di bawah " Keanggotaan Target ", "centang" entri nama Proyek
sumber
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.
sumber
SAYA AKHIRNYA memperbaiki ini, saya lupa menambahkan kode berikut ke file .m saya:
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 :.
sumber
Ini terjadi karena .xib telah mendapat tautan basi ke Delegasi Aplikasi lama yang tidak ada lagi. Saya memperbaikinya seperti ini:
sumber
cukup tambahkan kode di bawah ini pada awal metode appatoateidfinishlanching appdelegate, maka akan berfungsi dengan baik
sumber
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:
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
.sumber
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 di
sumber
Tidak hanya dalam pengaturan proyek, tetapi dalam pengaturan Target juga Anda harus menambahkan flag -all_load -ObjC ..
Core-Plot: Kelas CPLayerHostingView tidak dikenal dalam file Interface Builder
sumber
Masalah ini sepertinya tidak ketinggalan jaman.
Saya memiliki masalah yang sama dengan Xcode 8 dan menyelesaikannya sama seperti smilebot :
Buka file storyboard Anda sebagai "Kode sumber" di dalam Xcode:
Cari kelas yang dirujuk & hapus seluruh bit yang mengatakan
customClass = "UnrecognizedClassName"
sumber
Hanya menghapus MyClass.m dan .h dan menambahkannya ke proyek lagi adalah bekerja untuk saya.
sumber
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.
sumber
Saya mengalami ini di Swift.
Memindahkan file .xib ke folder Base.lproj proyek menyingkirkan kesalahan ini.
sumber
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!
sumber
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)
sumber
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.
sumber
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.
sumber
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!
sumber
Saya menambahkan file Dalam Bangun Fase dalam Target dan masalah terselesaikan. Untuk langkah-langkah menambahkan file, lihat jawaban saya di:
Kesalahan Apple Mach-O Linker (APActivityIcon)
sumber
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 ...
sumber