Arabirim Oluşturucu bir farkında olmasına rağmen MyClass
, uygulamayı başlatırken bir hata alıyorum.
Bu MyClass
, bir kitaplığın parçası olduğunda olur ve sınıfı doğrudan uygulama hedefinde derlersem gerçekleşmez.
Arabirim Oluşturucu bir farkında olmasına rağmen MyClass
, uygulamayı başlatırken bir hata alıyorum.
Bu MyClass
, bir kitaplığın parçası olduğunda olur ve sınıfı doğrudan uygulama hedefinde derlersem gerçekleşmez.
Yanıtlar:
Çalışma zamanında " Bilinmeyen sınıf MyClass Arabirim Oluşturucu dosyasında yazdırıldı . " Hatasına rağmen , bu sorunun Arabirim Oluşturucu'yla ilgisi yoktur, bunun yerine hiçbir kod doğrudan kullanmadığı için bir sınıfı bağlamayan bağlayıcı ile ilgilidir.
.Nib verisi (.xib'den derlenir) çalışma zamanında yüklendiğinde, MyClass
bir dize kullanılarak başvurulur, ancak bağlayıcı kod işlevselliğini analiz etmez, sadece kod varlığını gösterir, bu yüzden bunu bilmez. Başka hiçbir kaynak dosyası bu sınıfa başvurmadığından, bağlayıcı yürütülebilir dosyayı hazırlarken varlığını optimize eder. Dolayısıyla Apple'ın kodu böyle bir sınıfı yüklemeye çalıştığında, kendisiyle ilişkilendirilmiş kodu bulamaz ve uyarıyı yazdırır.
Varsayılan olarak, Objective-C hedefleri -all_load -ObjC
varsayılan olarak ayarlanmış ve tüm sembolleri koruyacak bayraklara sahip olacaktır. Ama bir C ++ hedefiyle başlamıştım ve buna sahip değildim. Yine de, bağlayıcıyı agresif tutan bir yol buldum.
Başlangıçta kullandığım kesmek gibi boş bir statik rutin eklemek oldu:
+(void)_keepAtLinkTime;
hangi hiçbir şey yapmaz, ama ben bir kez arayacaktı, gibi:
int main( int argc, char** argv )
{
[MyClass _keepAtLinkTime];
// Your code.
}
Bu, bağlayıcıyı tüm sınıfı korumaya zorlar ve hata kaybolur.
Jlstrecker'ın yorumlarda belirttiği gibi, gerçekten bir _keepAtLinkTime
yöntem eklememiz gerekmiyor . Sadece mevcut olanı çağırmak, örneğin:
[MyClass class];
hile yapar (sizden türetildiği sürece NSObject
).
Elbette, bunu kodunuzun herhangi bir yerinde arayabilirsiniz. Sanırım ulaşılamaz kodda bile olabilir. Fikir, bağlayıcıyı bir MyClass
yerde kullanılan düşünmeye kandırmaktır, böylece onu optimize etmede çok agresif değildir.
Hızlı görüş tanımı. Geçersiz kıldığınızdan emin olun init(coder aDecoder: NSCoder)
. Görünüm denetleyicisinin Objective-C tanımı. Ve armut ağacında bir uç.
Sınıfınızı seçtiğiniz Nib ayrıntıları denetçisine Modül Adı ekleyin.
MyClass
. Sadece devralan bir yöntemi çağırmak NSObject
gibi +class
.
MyClass.m
, Dosya Denetçisinin Hedef Üyelik bölümünde gereken tüm hedefleri kontrol edebilirsiniz .
Bunu Laura'nın önerdiği şeyler doğrultusunda düzelttim ancak dosyaları yeniden oluşturmam gerekmedi.
XCode 4'ü kullanarak, Proje Gezgini'nde , şikayet ettiği sınıfı içeren .m dosyasını seçin
Görünüm-> Yardımcı Programlar-> Dosya Denetçisini Göster'e gidin
(bu, Dosya Denetçisini sağda, bu .m dosya bilgileriyle gösterecektir )
Hedef Üyelik bölümünü açın ve bu .m dosyası için hedefinizin seçildiğinden emin olun
.M dosyamı projeme eklediğimde, herhangi bir nedenle varsayılan hedefime eklemedi ve bahsettiğim hatayı almama neden oldu.
Bunun gerçekten Arayüz Oluşturucu ile bir ilgisi yok, burada olan şey sembollerin Xcode tarafından statik kütüphanenizden yüklenmemesidir. Bu sorunu gidermek -all_load -ObjC
için,Other Linker Flags
için Proje (ve muhtemelen Hedef) Oluşturma Ayarları anahtarına .
Objective-C sınıf başına sadece bir sembol ürettiğinden, bağlayıcıyı -ObjC bayrağını kullanarak sınıf üyelerini de yüklemeye zorlamalıyız ve ayrıca -all_load
bağlayıcı bayrağını ekleyerek tüm nesnelerimizin statik kütüphanemizden dahil edilmesini zorlamalıyız . Bu bayrakları er ya da geç atlarsanız unrecognized selector
, burada gözlemlediğiniz hata gibi başka istisnalar alırsınız.
-ObjC
Benim durumumda sadece bayrağın bunu düzelttiğini buldum.
-ObjC
sorunu çözmek için kullanmak yeterince iyidir.
Bugün Swift kullanarak bu problemle karşılaştım.
Sınıfı Model.h + Model.m
a olarak değiştirdim Model.swift
. Bu nesne class = Model
,.
Nesneyi değiştirir değiştirmez sınıf artık yüklenemedi.
Ne yapmak zorunda IB sınıf referansını değiştirmek oldu:
Class = Model
Module =
için
Class = Model
Module = <TARGETNAME>
<TARGETNAME>
Yapı ayarlarında bulacaksınız . Ayrıca, oluşturulan Swift-Header'ınızda görünen addır:#import "TARGETNAME-Swift.h"
Module
adı tam aşağı açılan menüdeydi. Uygulamamın adıydı.
"ProjectName" gidin, üzerine tıklayın ve sonra "Aşamaları oluştur" sekmesine gidin ve sonra "kaynakları derle" ye tıklayın ve sonra "+" düğmesine tıklayın, bir pencere görünecektir, "Sınıfım" ı seçin. m "dosyasını ve ardından" ekle "yi tıklayın,
Projeyi derleyin ve çalıştırın, sorun kesinlikle çözülecek
Bu bir Xcode4 önbellek sorunudur, / Users / your_user / Library / Application Support / iPhone Simulator / 4.3 / Applications / altındaki tüm klasörleri silin.
Ayrıca iPhone'unuzda aynı sorunu test ediyorsanız, eski uygulamayı çalıştırmadan önce silin ...
İyi şanslar. Pascual
Bazen IBuilder kaçırdı customModule="AppName" customModuleProvider="target"
Düzeltmek için film şeridini kaynak kodu olarak açın ve bu satırı değiştirin:
<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
sceneMemberID="viewController">
buna:
<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">
customModule="MyFrameworkName"
. Kocaman +10
Benim durumum - Hedef c projemde hızlı bir çerçeveden bir Sınıf kullanmaya çalışırken, bu hatayı aldım. Çözüm, aşağıda gösterildiği gibi Arayüz oluşturucu / Storyboard'a sınıfın Modülünü (hızlı çerçeve) eklemekti. Başka hiçbir şey
Derleme Aşamaları -> Kaynakları Derle'ye gidin ve yeni .m dosyalarınızı ekleyin.
Benim durumumda bile var olmayan bir sınıf için bir hata gösteriyordu! Film şeridi dosyasında dolanan bir şey olduğundan şüphelendim. Hatada sınıf dosyasını tanımıyorsanız, şunu deneyin:
1) projenizi yüce veya başka bir iyi editörde açın. Atıfta bulunulan sınıfı arayın. 2) tüm biti kaldırın
customClass="UnrecognizedClassName"
3) kaydedin. 4) xcode'a dönün ve projeyi temizleyin ve şimdi çalıştırmayı deneyin.
benim için çalıştı.
customClass="MyCla"
). Özel sınıf ödevini silmek yerine, ilk etapta kullanmayı düşündüğüm sınıfa girmek benim için ihtiyatlı davrandı :)
Bu yanıtı eklemek istiyorum, çünkü burada tüm cevaplar sınıfın gerçekten var olduğunu varsaymıyorsa .. sadece linker / derleyici onu görmek için çok aptalca .. cevaplar ya varlığı linker uyarıyor etrafında dönüyor sınıfın ya da 'zorlamak' için bir kesmek oluşturmak var ..
benim sorunum bu mesaj aslında varolmayan bir sınıftan bahsediyorsa olur .. bu yüzden bir örnek bana belirli bir sınıf hakkında bilgisi olmayan eski bir git revizyonuna geri dönmektir .. yine de derleyici, söz konusu sınıfın mevcut değil ..
çözüm?
bundan sonra gitmek için iyi olmalısın
Hatayı kaldırmanın en iyi yolu: 1) Sınıf Dosyasını (.m) seçin 2) " Hedef Üyelik " altında , Proje adı girişini "kontrol edin"
Class.h ve .m dosyasındaki metni kopyalayarak, bu sınıf dosyalarını projeden silerek ve "Dosya Ekle" kullanarak aynı ada sahip yeni class.h ve .m dosyaları oluşturarak bu sorunu çözdüm. Sonra kodu yeni dosyalara yapıştırdım ve her şey harika çalıştı. Bir şekilde dosyalar oluşturulduklarında doğru şekilde bağlanmadı. Bundan sonra herhangi bir bağlayıcı bayrak kullanmam gerekmiyordu.
Nihayet bu düzeltildi, benim .m dosyama aşağıdaki kodu eklemeyi unutmuştu:
@implementation MyTableViewCell
@end
Bu nedenle, tablo hücrem için .xib dosyasındaki bir öğeyle bağlantısı olan bir yer tutucu @interface oluşturduğumdan kaynaklanıyordu, ancak Interface Builder'da bir sınıf için @ uygulama belirtilmediğinde, bulamıyor.
Kodumun dışında yorum yapmış olsa bile kaynak olarak .xib görüntüleme ve MyTableViewCell görmek diğer forumlarda tüm adımları atlamıştı. Simülatörü sıfırlamayı denemiştim. Hatta tüm sınıflarımı arabirimlerle aynı adlı ayrı dosyalara bölmeyi denedim, ancak bu kadar hiçbir şey işe yaramadı.
Deneyimlerime göre PS, .h / .m dosyalarının adlarının @ arabiriminin adlarından farklı olup olmadığı önemli değildir. Birden fazla @ arabirim içeren birkaç dosya var ve onlar iyi çalışıyor.
PPS UITableViewCell ve UICollectionViewCell'in neden bu hataya neden https://stackoverflow.com/a/22797318/539149 adresinde , registerClass: forCellWithReuseIdentifier kullanılarak nasıl ortaya çıkarılacağı ile ilgili daha ayrıntılı bir açıklama var .
Bunun nedeni, .xib'in artık mevcut olmayan eski Uygulama Temsilcisi ile eski bir bağlantısı olması. Ben böyle sabit:
Bunu ve bu sitede listelenen diğer cevapları denedim, hiçbiri benim için sıralamadı. Bu yorumlar ( http://www.iphonedevsdk.com/forum/iphone-sdk-development/43330-unknown-class-interface-builder-file.html ) yardımcı oldu:
Arama yaptıktan ve aradıktan ve aradıktan sonra, sonunda bir dosyada gizlenen bu silinen sınıfın adını keşfettim. Arayüz oluşturucu dosyalarını X kodunda açmak için üzerlerine sağ tıklayıp 'kaynak kod olarak görüntüle' seçeneğini seçmem gerekiyordu. Sonra onu bulmak için geldi
<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>
Son satırın kaldırılması maalesef düzelmez, dosyada yanlış sayıda öğe olduğundan şikayet eder. İlgili satırları, üzerindeki satırlar bölümünde kaldırmanız gerekir CustomClass
.
Benim durumumda, XCode6 var, belirtilen sınıf .m dosyası derleme aşamasında yanlış yerde bitiyor - Derleme Kaynakları altında olmalı , ancak sonunda
Sadece proje ayarlarında değil, Hedef ayarında da -all_load -ObjC bayrakları eklemeniz gerekir.
Core-Plot: Interface Builder dosyasında bilinmeyen sınıf CPLayerHostingView
Bu sorun modası geçmiş gibi görünmüyor.
Ben Xcode 8 ile aynı sorunu vardı ve smilebot gibi benzer çözüldü :
Film şeridi dosyanızı Xcode içinde "Kaynak kodu" olarak açın:
Yönlendirilen sınıfı arayın ve söyleyen bitin tamamını kaldırın
CustomClass = "UnrecognizedClassName"
Arabirim Oluşturucu dosyasında 'Bilinmeyen sınıf favouritesButton' vardı ve söz konusu düğmenin Kimlik Denetçisinin üstündeki Sınıf alanında sahte bir "favouritesButton" sınıfına sahip olduğu bir hikaye kitabı sahnesine kadar izledim. Bu değeri bir sonraki alana koymak istedim: Kimlik Etiketi.
Bunu "UIButton" olarak değiştirmek sorunu çözdü.
Buna Swift'te rastladım.
.Xib dosyasını projenin Base.lproj klasörüne taşımak bu hatadan kurtuldu.
Ben aaLuminate app Xcode 4 altında Universal dönüştürürken bugün bu hata kırpma vardı Bu uygulama programı şablonuna dayanmaktadır ve başlangıçta Xcode 3 altında inşa edilmiştir.
Zaman kazanmak için iPhone Ana ve Flipside Görünümlerini Universal uygulamasındaki uygun isimlere kopyaladım. "Arabirim oluşturucu dosyasında bilinmeyen sınıf x" hatasıyla karşılaştım. Benim durumumda XIB dosyalarında veya hedeflerinde hiçbir şey yoktu.
Ayrıca başka nedenlerle aaLuminate-Info.plist dosyasını kopyalamıştı - bu eski bir anahtar "Main nib file base name" MainWindow için ayarlanmış vardı.
En kısa sürede bu anahtarı sildi sorun düzeltildi!
Benim durumumda bu hatayı aldım çünkü yeni bir proje oluşturup daha sonra kaynak dosyaların birkaçını silerek ve aynı projedeki kaynak dosyalar üzerinde çalışan projeden kopyalayarak bazı işleri kaydetmeye çalıştım. Ayrıca RootViewController aradığım MainStoryBoard dosyamı kopyaladım. Ancak, özgün RootViewController'ı sildikten ve önceki üründen RootViewController'a eklediğimde, açıkça Dosya Ekle işlemi yukarıda önerildiği gibi hedef kutusunu "işaretleyemedi". Yalnızca tüm newley ithal edilen ".m" dosyalarını ziyaret ederek ve hedef üyelik kutusunun işaretli olduğundan emin olunca her şey yolundaydı. Sanırım olan şey, storyboard dosyasının, hedef üyeliğin kontrol edilmemesi nedeniyle bağlantıdan "hariç tutulan" bir sınıfı aradığıydı. Hedefe yönelik gerekli dosyaların, dosya denetçisindeki hedef üyeliğe bu şekilde atandığından emin olun. Teşekkürler Pat! (yukarıyı görmek)
Benim durumumda, .h dosyasında bir UITableView hücresinin bir alt sınıfının bir alt sınıfını bildirmiştim (her iki alt sınıfın da beyanı aynı .h dosyasındaydı), ancak bu ikinci alt sınıfın boş bir uygulamasını yapmayı unuttum. .m dosyası.
.h dosyasında bildirdiğiniz bir alt sınıfın alt sınıflarını uygulamayı unutmayın! .h / .m dosyası başına bir sınıfla çalışıyorsanız Xcode bunu sizin için yapacağından basit, ancak unutulması kolay geliyor.
RateView UIView bir alt sınıf olduğu "Arayüz Oluşturucu'da Bilinmeyen sınıf RateView" vardı. Storyboard sahnesime bir UIView bıraktım ve Özel sınıf alanını RateView olarak değiştirdim. Yine de, bu hata ortaya çıktı.
Hata ayıklamak için, sınıfımın adını RateView2 olarak değiştirdim ve UIView'in Özel sınıf alanı dışındaki tüm başvuruları eşleşecek şekilde değiştirdim. Hata iletisi daha önce olduğu gibi RateView eksik sınıf olarak görünüyordu. Bu, hata iletisinin Özel sınıf alanının değeriyle ilişkili olduğunu doğruladı. Bu değeri RateView2 olarak değiştirdim ve hata mesajı "Interface Builder'da bilinmeyen sınıf RateView2" olarak değiştirildi. İlerleme durumu.
Son olarak, kaynak kodu dosyalarını Dosya Denetçisinde inceledim. Orada kaynak kod dosyasının (bir öğreticiden kopyaladığım) Hedefim ile ilişkili olmadığını keşfettim. Başka bir deyişle, Hedef Üyeliği yoktu. Sınıfın kaynak kod dosyasını hedef uygulamanın bir üyesi yapan kutuyu işaretledim ve hata mesajı gitti.
Benim durumumda "viewController" adlı bir sınıfı, film şeridinin kimlik denetçisiyle (üstte 'Özel Sınıf' altında) seçildiğini fark etmeden silmiştim.
Kimlik denetçinizin Özel Sınıf alanında görünüm denetleyicisi için doğru sınıfı seçmeniz veya projenize yeni bir sınıf eklemeniz ve bunu Özel Sınıfınız olarak seçmeniz yeterlidir.
Benim için çalıştı!
Hedefler altında Oluşturma Aşaması altında dosyayı ekledim ve sorun çözüldü. Dosya ekleme adımları için şu adrese cevabım bakın:
Bu beni biraz deli etti ve yukarıdaki önerilerin hiçbiri hatadan kurtulmama yardımcı olmadı. Neyse ki sadece sınıf kullanarak bir IB nesne vardı, bu yüzden sadece sildi ve belirtilen aynı sınıf ile geri ekledi. Hata gitti ...