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:
+(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 _keepAtLinkTime
metode. 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 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.