Arayüz Oluşturucu dosyasında "Bilinmeyen sınıf <MyClass>" hatası


260

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.


Kütüphaneye nasıl bağlanırsınız?
Elise van Looij

Bağımlı bir alt proje kullandım ve Xcode alt projesinin ürünlerinden geçerli hedefimin "Kütüphaneyle İkili Bağlantı Oluştur" oluşturma aşamasına bir drag'n'drop yaptım.
jhoule

Sınıf CocoaPods'tan geliyorsa, bu github.com/CocoaPods/CocoaPods/issues/491 adresine yardımcı olabilir .
Protocole

İlişkili olabilir mi? stackoverflow.com/a/24924967/511299
Sunkas

Yanıtlar:


222

Ç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, MyClassbir 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 -ObjCvarsayı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 _keepAtLinkTimeyö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 MyClassyerde kullanılan düşünmeye kandırmaktır, böylece onu optimize etmede çok agresif değildir.

Xcode 6.3.2 ve Swift 1.2

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.


2
.Xib verileri çalışma zamanında yüklenmez. IB derleyicisi, xib'i bir ucu derler; uç, çalışma zamanında yüklenen şeydir.
Peter Hosey

19
Değiştirmeniz gerekmez MyClass. Sadece devralan bir yöntemi çağırmak NSObjectgibi +class.
jlstrecker

10
Orijinal soru gönderildiğinde Xcode 4 olmamasına rağmen, aşağıdakiler hala uygun görünüyor. Xcode 4'te, hatayı ortadan kaldırmak için kukla bir yöntem eklemek yerine MyClass.m, Dosya Denetçisinin Hedef Üyelik bölümünde gereken tüm hedefleri kontrol edebilirsiniz .
adubr

51
Bu günlerde başka bir olasılık da MyClass.m dosyasının Derleme Kaynakları oluşturma aşamasında olmayabilir. Bu, MyClass.h / m dosyasını Yeni Dosya kullanarak oluşturmak yerine projenize sürüklerseniz oluşabilir.
Steven Fisher

6
@JoshBruce Swift çözümünü açıklayabilir misiniz? Gerçekten anlamıyorum.
Ryan Bobrowski

183

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.


Bağlayıcı hatasının bazen dosyanızı ilk başta hedefinizde derlememesinden kaynaklandığı doğrudur. Açıkladığınız, bir dosyanın ilişkili olduğu hedef (ler) i kontrol etmenin yoludur. Maalesef, dosyam zaten hedefimin bir parçasıydı, ancak yine de bir bağlantı sorunum vardı. Bunun nedeni büyük olasılıkla kütüphanemin farklı varsayılan bağlayıcı bayrakları olan C ++ (Objective-C yerine) olmasıydı (yukarıdaki Alasdair Allan ve Sijo'nun gönderilerine bakın).
jhoule

5
"Hedef Üyelik" onay kutum zaten işaretli olduğundan, bu öneri benim için biraz farklı olsa da çalıştı. İşaretini kaldırdım ve yeniden oluşturdum, ancak daha sonra yeni mesajımın adını göstermek için hata mesajı değişti. Kutuyu tekrar kontrol edip tekrar inşa ediyoruz, şimdi her şey çalışıyor. Önbellek dosyalarını silmekten çok daha kolay!
electromaggot

Xcode UI ile mükemmel çözüm. @electromaggot, sınıfları el ile eklediğinizde Xcode'un kafası karışabilir, bu nedenle birden fazla dosya eklemeniz gerekebilir.
Gönen

Bu benim için de bir çözüm. Başka bir projeden bazı sınıf dosyalarına sürüklemiştim ve bu sınıf dosyaları istisnayı yaratanlardı.
hairbo

1
Projemden bir dosyayı sildim ve daha sonra aynı dosyayı daha sonra ekledim ve bu sorunu çözdü.
MindSpiker

70

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 -ObjCiç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_loadbağ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.


5
-ObjCBenim durumumda sadece bayrağın bunu düzelttiğini buldum.
Kekoa

5
@Kekoa, Xcode (LLVM) sürümünüzün bu cevabı yazan kişiden daha yeni olması nedeniyle. Günümüzde, -ObjCsorunu çözmek için kullanmak yeterince iyidir.
Till

bu sadece bana yardımcı oldu. Derleme sırasında, tüm çerçeveleri içe aktardığımda çözülen gerekli çerçeve ile ilgili sorunları gösterdi.
Vaibhav Saran

-ObjC bayrağı tek başıma sorunumu çözdü. Aslında iOS7'de all_load özniteliğine sahip olduğum için hata aldım.
Sushma Satish

-All_load -ObjC kullanmak ürün boyutunda gereksiz artışlara neden olabilir. bu sorun yalnızca çerçevelerde kategori dosyalarında da görülür.
Ali Amin

26

Bugün Swift kullanarak bu problemle karşılaştım.

Sınıfı Model.h + Model.ma 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"


1
Bu doğru cevap gibi görünüyor. Birisi aksini söyleyemezse, bu doğru olarak işaretlenmelidir.
Bjørn Ruthberg

1
Harika cevap teşekkürler. Benim için Moduleadı tam aşağı açılan menüdeydi. Uygulamamın adıydı.
ChrisH

Benim için çalışıyor. Benim sorunum için, cevabınızda belirtilen <TARGETNAME>, sınıfı içeren çerçevenin adıdır.
Tyler Long

Bu sonuca kendi başıma geldim, bu aynı zamanda aldığım hataydı ve yazınızı gördüğümde bulgularımı göndermeye istekliydi. Aslında gördüm ama birçok cevap ve etrafındaki gürültü yüzünden geçti. Cevabınızı bazı ekran görüntüleri ile yanıtınızı diğerlerinden ayırmak için geliştirilebileceğini düşünüyorum. Öyle olsaydı onu yakalayacağım. Her neyse, buraya gönderdiğin için çok teşekkürler. Benim oyumu aldın.
jvarela

AppDelegate için bunu Interface Builder kullanıcı arayüzünde çözebildim. Bir pencere içindeki bir UI öğesinin özel sınıfı için, Interface Builder UI özel sınıfı ve modülü ayarlamama izin vermez. Aşağıdakileri yapmak zorunda kaldım: (1) .xib dosyasını "Kaynak Kod" olarak açın (üzerine sağ tıklayın). (2) customClass özelliğinin yanına "customModule = <TARGETNAME>" özelliğini ekleyin.
Poulsbo

20

"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


Evet, yeni ithal ettiğim derslere eklemek istediğim TÜM hedef kutularını işaretlememiştim. Teşekkürler!
Joel Balmer

Evet! VC dosyam Target projesinde eksik.
Sebastian Dwornik

19

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


8
Proje Derleme Ayarlarında "-all_load -ObjC" bayraklarını "Diğer Bağlayıcı Bayrakları" anahtarına eklemeniz gerekir. Bu Xcode 4'e özgü bir sorun değildir ve aslında Interface Builder ile de hiçbir ilgisi yoktur.
Alasdair Allan

Bu çözüm Ocak 2010'da zaten önerilmişti (yukarıya bakınız).
jhoule

6
Evet - bunu yapmanın daha kolay yolu sadece iOS Simulator'ı
açmaktır

Ya da yaptığımı yapabilir ve söz konusu uygulamayı Simulator ana ekranından silebilirsiniz. Aynı hata mesajını aldım, ancak eski bir uygulama temsilcisine atıfta bulunuyordu.
spstanley

16

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">

Xcode 6.3 (6D570) 'i çalıştırır çalıştırmaz orijinal (kötü) ayarına geri döner. Hata? Objective C projesinde hızlı bir dosya dahil etmeye çalışıyorum.
addzo

XCode 6.4'te, film şeridi kaynak koduna, istenen viewcontroller'ın altına customModuleProvider = "target" eklenmesi sorunu düzeltti.
Amro Shafie

Sorunumu adil bir şekilde çözebildim customModule="MyFrameworkName". Kocaman +10
Stan

Aslında benim sorunum tam tersiydi, CustomTaget'i silmek istedim ama Xcode xib kaynak dosyasını değiştirmiyordu, bu yüzden çalışması için customModule = "AppName" customModuleProvider = "target" öğesini silmek zorunda kaldım.
Adriana

14

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

resim açıklamasını buraya girin


2
CocoaPods tarafından kurulan Swift projesinde bir Swift çerçevesi kullanıyorum. Bu yöntem işe yarar. Ve modül adı çerçevenin adıdır.
JsW

1
Bu mükemmel çalışıyor. Neden bu modül kaldırıldı ??
iSrinivasan27

Cocoapod çerçeveler sorunları ile mükemmel çalışır ... mükemmel cevap için size kudos ...
jayant rawat

13

Derleme Aşamaları -> Kaynakları Derle'ye gidin ve yeni .m dosyalarınızı ekleyin.


Evet, bir önceki projeden bir XCode 4.5 projesine yeni dosyalar ekledikten sonra, .m dosyalarını Derleme Kaynakları listesine ekleyerek kesin olarak yaptınız. Benim durumumda "-all_load -ObjC" eklemek işe yaramadı, ama zarar vermedi.
whyoz

13

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ı.

resim açıklamasını buraya girin


OSX TextEdit uygulamasını kullanıyorum. Bu operasyon için iyi çalıştı. Önce projenizi ve Xcode'u kapattığınızdan emin olun.
TJ

Bu da yardımcı oldu. Aynı customClass ile birden fazla nesne vardı, muhtemelen denetleyici yerine görünümü tıklattım ve aynı adı atadım.
Mc-

1
Bu aynı zamanda karşılaştığım sorunun da çözümü oldu; Daha önce kısmi bir sınıf adı girmiştim ve bir şekilde film şeridi bu şekilde kaydedildi (örneğin customClass="MyCla"). Özel sınıf ödevini silmek yerine, ilk etapta kullanmayı düşündüğüm sınıfa girmek benim için ihtiyatlı davrandı :)
dave

9

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?

  • Her şeyi nuke ! önce bu dizindeki tüm içeriği silerek tüm yapı dosyalarını vb. silin ~ / Library / Developer / Xcode / DerivedData
  • uygulamayı telefonun kendisinden silin (ve bir simülatör kullanıyorsanız simülatör içeriğini temizleyin)

bundan sonra gitmek için iyi olmalısın


2
Bunu yeterince + 1'leyemiyorum, sorunumu çözdüm. Sorunum, dosyanın zaten silinmiş olduğu konumla aynıydı, ancak derleme sırasında uyarı hala görünüyordu.
Brett

Storyboard'da Tanımlayıcıyı doldurmanız gerekir. Bazen yanlışlıkla "Sınıf" alanına (Kimlik Denetçisine) yazarım. Böylece derleyici, Sınıf'ın mevcut olmama nedeninden şikayet ediyor!
Vincent

9

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"


Bu çalışıyor. Bir bölme geliştiriyordum ve herhangi bir nedenle bölme yükleme komutu belirli bir sınıf dosyasına yanlış hedef uyguluyordu. Sahip olduğum bir kaynak paketine uygulanıyordu. Doğru yapılandırma Pods- <project-title> - <pod-title>
krosullivan

Bu benim için işe yaramıyor. Hedef üyelik doğru, ancak hata oluşmaya devam ediyor.
Kokodoko

8

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.


1
dosyaları ilk oluşturduğumda sonunda .m yoktu. Dosyayı yeniden adlandırmayı ve geri eklemeyi denedim, ancak xcode mutlu olmadan önce dosyayı silmek ve yeniden oluşturmak zorunda kaldım.
odyth

Dosyanız muhtemelen hedefinizin bir parçası değildi. Yeniden eklenmesi, muhtemelen uygun hedefte varsayılan bir onay kutusuyla sonuçlandı.
jhoule

1
Bu çözüm de benim için çalıştı, ancak birinci sınıfı (.h + .m) silmeden önce, hedefimin bir parçası olup olmadığını kontrol ettiğimden% 100 emin oldum. Benim için sorun bu değildi. Laura gibi, sınıfı sildim ve tekrar (farklı bir adla) yaptım ve bu sayfadaki diğer çözümlerden hiçbiri olmadan iyi çalıştı.
Nate

7

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 .


6

Bunun nedeni, .xib'in artık mevcut olmayan eski Uygulama Temsilcisi ile eski bir bağlantısı olması. Ben böyle sabit:

  • .Xib dosyasına sağ tıklayın ve Farklı aç> Kaynak kodu
  • Bu dosyada, eski Uygulama temsilcisini arayın ve yenisiyle değiştirin

Kaynak Kodu olarak aç artık yok, ancak kolayca sağ tıklayıp Finder'da Göster'e tıklayabilir, ardından dosyaya sağ tıklayıp TextEdit'te açabilirsiniz. Tabii ki, herhangi bir değişiklik yapmadan önce dosyayı yedekleyin;)
Scott Allen

6

sadece appdelegate aplikatoindidfinishlanching yönteminin başında aşağıdaki kodu ekleyin, o zaman iyi çalışır

[sınıfım sınıfı];


5

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.




4

Bu sorun modası geçmiş gibi görünmüyor.

Ben Xcode 8 ile aynı sorunu vardı ve smilebot gibi benzer çözüldü :

  1. Film şeridi dosyanızı Xcode içinde "Kaynak kodu" olarak açın:

  2. Yönlendirilen sınıfı arayın ve söyleyen bitin tamamını kaldırın

CustomClass = "UnrecognizedClassName"

  1. Film şeridi dosyanızı "arayüzler arası - film şeridi" olarak tekrar açın ve uygulamanızı yeniden oluşturun.

3

Sadece MyClass.m ve .h kaldırmak ve tekrar projeye eklemek benim için çalışmaktır.


3

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ü.



1

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!


1

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)


1

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.


1

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.


1

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ı!



1

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 ...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.