SORU
12 Kasım 2009, PERŞEMBE


"Bilinmeyen class <Sınıfım> Interface Builder dosyası" hata zamanında

Builder* *3, bir ben farkında Arayüzü uygulama başlatılırken bir hata olsa bile.

Bu MyClass bir kütüphanenin bir parçası olur, ve eğer ben sınıfı doğrudan uygulama derleme hedef olmasını değil.

CEVAP
12 Kasım 2009, PERŞEMBE


". Rağmen ^em>Bilinmeyen sınıf Interface Builder dosyası Sınıfım." hata kodu direkt olarak kullandığı için bir sınıf bağlama değil linker, bu sorunu Arabirimi ile bir ilgisi yok çalışma zamanı Builder, ama oldukça baskılı.

O zaman .uç veri (derlenmiştir .xib) çalışma zamanında yüklenir, MyClass bir dize kullanarak başvurulan, ama bağlayıcı olduğunu bilmiyor bu yüzden kod işlevi, kod varlığı sadece analiz değil. Başka bir kaynak başvuran sınıf dosyaları yılından bu yana, bağlayıcı çalıştırılabilir yaparken akıl optimize eder. Apple'ın kodu bir sınıf yüklemek için çalıştığında, kod ile ilişkili bulamıyorum, ve uyarı yazdırır.

Varsayılan olarak, Objective-C hedefler -all_load -ObjC bayrak simgeleri tüm tutacak, varsayılan olarak ayarlanmış olacaktır. Ama C bir hedef ile başlamıştım ve o yoktu. Bununla birlikte, bağlayıcı agresif tutan bir çözüm yolu buldum.

Hack aslında boş bir statik rutin gibi ilave etmekti kullanıyordum:

 (void)_keepAtLinkTime;

hiçbir şey yapmaz, ama bir kez gibi: arayacağıma

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

Bu linker bütün sınıf tutmak için zorlayacaktır ve bu hata kayboluyor.

Jlstrecker açıklamalarda belirttiği gibi, gerçekten _keepAtLinkTime bir yöntem eklemek için ihtiyacımız yok. Sadece varolan bir, gibi arama:

   [MyClass class];

hile (NSObject Bir yerden türer sürece).

Tabii ki, kodu herhangi bir yerde bu diyebilirsiniz. Ulaşılamaz kod bile olabilir sanırım. Fikri MyClass optimize çok agresif değil mi diye, bir yerde kullanılmış olduğunu düşünmeye içine aptal linker.

6.3.2 & Swift 1.2 Güncellemelerinden

Görüş Swift tanımı. Emin init(coder aDecoder: NSCoder) geçersiz kılmak için. Objective-C görünüm tanımı denetleyicisi. Ve armut ağacında bir uç.

Modül Adı Sınıf aldığın yer detayları Müfettiş Uç ekleyin.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • justintimberlakeVEVO

    justintimber

    2 EYLÜL 2009
  • TWiT Netcast Network

    TWiT Netcast

    27 EKİM 2005
  • xSammyJoe1

    xSammyJoe1

    19 Temmuz 2011