Xcode 6 Hata: Arayüz Oluşturucu dosyasında bilinmeyen sınıf


600

Xcode 6 beta 4'e geçtim ve şimdi Uygulamam mesajla sürekli çöküyor

Interface Builder dosyasında bilinmeyen X sınıfı.

Sözde Xcode, Storyboard'umda bağladığım özel sınıflarımı bulamadığı için çöküyor, ancak Xcode arayüzünde doğru bir şekilde bağlandıklarını gösteriyor.

Her şeyin doğru şekilde bağlandığından eminim. Diğer tek seçeneğim, film şeridi dosyasının tamamını silmek ve sıfırdan başlamak olabilir, çünkü bir şekilde bozulmuş olabilir.

Düzenleme: Ben de temizlik, simülatör sıfırlama, yapı aşamaları vb ile karışıklık denedim eklemek istiyorum. Bunların hiçbiri işe yaramaz.



1
@ ImreKelényi Haklısın. Az önce tarif ettiğin şeyi yaptıktan sonra bu bana tekrar oldu.
Epic Byte

Bu benim için çalıştı, stackoverflow.com/questions/1725881/…
vrunoa

Benim için yazım hatasıydı, Kontrol öğesine hata ayıklayın, gelene kadar seçin; Görünüm Denetleyici> kimlik denetçisi> Özel Sınıf> Sınıf. o sınıf tanımlanmamışsa bunu silin.
Mavericks

9
LÜTFEN AKLINIZDA BULUNDURUN! Bu "hata" farklı kökenlerden kaynaklanabilir. Kabul edilen cevap sizin için işe yaramıyorsa aşağı gidin ve sonraki yanıtı deneyin. Durumum için doğru cevap 5. cevaptı.
Jacksonkr

Yanıtlar:


1454

Soruyu yazarken bu sorunu çözdüm. Ben Xcode 6 beta 4 kullanırken bu sorunun üstesinden gelebilecek herkes için soruyu cevaplamak ve burada bırakmak düşündüm.

Bu sorunu çözmek için, Storyboard'da özel sınıf nesnelerinizin her birini seçmeniz gerekir (bu, özel görünüm denetleyicilerinin kendileri de dahil olmak üzere tüm özel görünümleri içerir).

Daha sonra bu nesneler seçiliyken kimlik denetçisini açın ve "Özel Sınıf" altında Modül seçeneğini görmelisiniz. Modül metin kutusunun içini tıklatın ve enter tuşuna basın.

Bu kadar! Tüm özel nesnelerim için geçerli modül, Xcode 6 beta 4'te bir şekilde dahili olarak yanlış ayarlanmış olmalıdır. Ancak, denetçide bunun görsel bir göstergesi yoktu.

Modül metin kutusunun içindeki enter tuşuna basarsanız, sağdaki oku seçmeyi ve geçerli modülünüzü manuel olarak seçmeyi deneyin, ardından metin kutusunu temizleyin ve enter tuşuna basın. Ayrıca, sınıf metin kutusunun içinde enter tuşuna basmayı da deneyebilirsiniz (bu genellikle farklı bir sorunu çözmektir).

İşte işleri daha net hale getirmek için bir resim: resim açıklamasını buraya girin


70
Benim için, "Modül "'ün içine tıklayıp enter tuşuna basmak tutarlı bir şekilde çalışmadı, ancak" Sınıf "alanını seçmek (ve enter'a basmak) her zaman işi yaptı.
Imre Kelényi

2
Benim için hedef doğru bir şekilde belirlendi, ancak sınıf hala IB'de görünmedi. Ancak dosyanın "Konum" un "Gruba Göre" yerine "Proje Göreceli" bir yol gösterdiğini fark ettim. Dosya referansını VE grubu kaldırmak ve proje köküne yeniden eklemek benim için çalıştı.
knl

8
Vay. Bunun için teşekkürler, başka türlü orada olurdu sanmıyorum. Bu @objc(...), Swift sınıflarımdan birine ekledikten sonra meydana gelen bir sorunu düzeltti .
ndbroadbent

12
Bu sorun hala XCode 7.2'de bulunmaktadır. Bu çözüm işe yaradı.
Tom Fast

3
Bu hala Xcode
8.3.1'de

99

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

7
Aslında benim durumumda kaldırmak zorunda kaldı customModuleProvider, sonra hata gitti.
Maciej Swic

3
Guillermo, Mart sonu itibariyle hala Xcode'da oluyor!
Ed Manners

3
@MaciejSwic Yaptım customModuleProviderbenim için de yaptı, teşekkür ederim!
Sakiboy

1
xib dosyaları ne olacak?
SleepsOnNewspapers

7
Hâlâ oluyor ... Ağlamak istememi sağlayan şey böyle :(
Luke

72

Hızlı bir sınıf yeniden adlandırdıktan sonra bu sorun vardı. @Objc yönergesi kullanılarak çözüldü:

@objc(ForumTopicListViewController) class ForumTopicListViewController

4
Bu benim için düzeltti, çalıştım @objc class Xve @objc(X) class Xdeğiştim.
Joe

1
Ayrıca türetilmiş verileri görmek silmeye deneyebilirsiniz stackoverflow.com/questions/24039932/...
user1760527

Tek Görünüm proje şablonundan varsayılan ViewController sınıfını yeniden adlandırdıktan sonra bu sorun vardı. Hangi büyünün kullanıldığını merak ediyorum, böylece @objc()'orijinal' ViewController sınıfı için direktif gerekli değildi ...
Berend Klein Haneveld

Ben karşı tarafa giderim. Modül adını Storyboard dosyasında belirtmiştim, ancak @objc yönergesini de ekledim.
WeZZard

1
Benim için çalışmadı. :( Modül adının çözümü de çalışmıyor.
efsanevi

64

Birden Çok Hedefli Proje

Benim durumumda birden çok Hedef içeren Proje üzerinde çalışıyorum ve konu "Hedeften Devral" kontrol edilmedi. "Hedeften devral" seçeneğini seçmek sorunumu çözdü

enter image description here


Bunu gönderdiğiniz için teşekkürler. Çok hızlı bir şekilde gördüğüm sorunu çözdü.
JaredH

Benzer bir durum yaşadım. (XCode 9.4.1) MxFileView (MxFileView.swift ve MxFileView.xib'den oluşan) adlı özel bir UIView ile FilesTestA adlı bir iOS uygulaması oluşturdum. Sonra başka bir hedef ekledim: Bugün widget'ı ("FilesTestAWidget"). Widget'ta MxFileView kullanma çözümü: (1) class = "MxFileView"; (2) "Modülü Hedeften Devral" seçeneğini işaretleyin (veya işaretini kaldırın ve manuel olarak "FilesTestAWidget" girin); (3) uygulama hedefinde, hem MxFileView.swift hem de MxFileView.xib öğelerinin Hedef Üyeliklerinde FilesTestAWidget içerdiğinden emin olun.
Kenster999

Bu bana Xcode 10.1'deki varsayılan şablondan (tek bir iOS uygulama hedefi ve 2 test hedefi) yeni bir projede oldu. Tüm özel görünüm denetleyicilerim için onay kutusunun işareti kaldırıldı (ve bu nedenle yer tutucu metni "Yok" idi). Film şeridimdeki her özel görünüm denetleyicisinin onay kutusunu işaretledikten ve kontrol ettikten sonra sorun çözüldü.
Mason

58

Bu benim için çalıştı.

Derlenmiş kaynağınızı (örneğin; ViewController.m) eklenip eklenmediğini kontrol edin, benim durumumda ViewController dosyası eklenmedi, bu yüzden bana hata veriyordu.

resim açıklamasını buraya girin


@CarmenA Sadece '.m' dosyalarını eklersiniz Compile Sources. Bu gerçekten bazıları için doğru (ve tek) çözümdür.
Jacksonkr

Şanssız birkaç çözüm denedim. Bu hile yaptı. Garip bir nedenden ötürü, bir hedef bana uygun olan kaynak dosyayı eksikti.
galactikuh

benim için de .. Bazıları çatışma çözümü aldığı için oldu
Eldhose

46

Bu, 6.0'ın üzerindeki herhangi bir Xcode'da olabilir. Swift projesinde bazı ViewController sınıflarını yeniden adlandırdıktan sonra başıma geldi (ama sanırım Obj-C ile de olacak). Sadece arayüz oluşturucuyu açmanız, sınıfının adını değiştirmiş olan ViewController'ın Kimlik Denetçisine gitmeniz, sınıfı seçmeniz ve Enter tuşuna basmanız yeterlidir. Bu, yeniden adlandırılan sınıfı seçilen ViewController'a yeniden atayacak ve ayrıca sınıfı yeniden adlandırdıktan sonra kaybolan Modül Değerini sıfırlayacaktır.

Xcode 8.1 Güncelleştirmesi (muhtemelen 8.0):

Xcode 8.1 çöküyor. Basit ve can sıkıcı bir şekilde çöker ve hiçbir şey yazdırmaz. IB'deki atanmamış sınıfın sadece aynı şey olduğunu bulmak için bir saat boyunca o hayali kazayı takip ediyordum. Bazı hayali kilitlenmeler yaşıyorsanız, önce atanmamış sınıflar için IB'yi iki kez kontrol edin.


Bunun için teşekkürler. önerinizi izlemeniz Xcode'un modülü (IB'deki sınıfın altında) Yok'tan Akım'a güncellemesine neden olduğu görülüyor. Ben sorun sadece isabet w / out isminin girilmesi Xcode tarafından bir modül güncelleme tetiklemek başarısız olduğunu düşünüyorum.
rockiesGrizzly

Bu benim için çalıştı. Yanlışlıkla bir denetleyici sınıfını yeniden adlandırdım, bu yüzden görünüm denetleyicisi yüklendiğinde artık mevcut değildi.
Litehouse

32

Bazen sağladığınız denetleyici, geçerli uygulamadan hedef üyeliğini kaybeder. Bu durumda, "Modül" alanında enter tuşuna basmak hiçbir şey yapmaz. Denetleyiciye gidin ve geçerli uygulamaya ayarlanmış hedef üyeliğe sahip olduğundan emin olun.


Benim için de sorun buydu - birden fazla hedef sınıf dosyasının yanlışlıkla oluşturduğum hedefe dahil edilmemesine yol açtı.
Ryan Kreager

Dosyaları birleştirdim ve hedeflerimden birinde özledim, harika cevap
Benjamin Jimenez

İyi, birleştirme pbx hedef üyelik değerlerini kırdı.
sistem

32

Etkinleştirme Inherit Module From Targetdoğru hedef modülü aldı. Bu sorunu çözdü.

resim açıklamasını buraya girin


Onaylamak. Bu, sorunu çözmeme yardımcı oldu.
Chris8447

Bir görünüm denetleyicisini Objective-C'den Swift'e dönüştürdüğümde genellikle bu sorunu yaşıyorum. Son harfi tekrar yazıyorum ve Enter'a basıyorum. Hile de yapmalı.
DevNebulae

30

Cevabım: Özel Modülü, eklenen ekran görüntüsünde olduğu gibi özel Pod adına (örneğimde - özel sınıf adına) eşit olarak ayarlayın

Bu çözüm belirli bir durum içindir : Bölme (veya Kartaca ) çerçevesinden özel görünüm sınıfları için .

Altyapı: XCode8, Swift3

resim açıklamasını buraya girin


18

ChikabuZ'un önerdiğinin tam tersini yaparak düzelttim (yine de işaret ettiğiniz için teşekkürler). Film şeridi dosyasında şunu bulun:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">

ve bununla değiştirin:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" sceneMemberID="viewController">

Swift derleyicisinde ve Xcode 6'da kaç saat kaybettiğime inanamıyorum


17

ModuleBenim için uygun olanı seçerek Custom Classbu sorunu çözdüm.

İşte burada :

resim açıklamasını buraya girin


13

Xcode 8'de bu sorunla karşılaştım , çözmek için metin düzenleyicide film şeridini değiştirmek zorunda kaldım.

Genel olarak kontrolünüzü arayın customModuleve customModuleProviderkontrol varlığını kaldırın .

Benim için bir numara yaptı.


Hah! Güzel kesmek :)
Vexy

10

Ben de aynı problemi yaşadım.

Benim durumumda, Xcode özel sınıfımı şu hedeflere eklemiyordu: Hedef> Faz Oluştur> Kaynakları Derle.

Bu nedenle CustomClass.m'nizin orada olup olmadığını doğrulamanızı öneririz.

resim açıklamasını buraya girin

Umarım bu sana yardımcı olur.


Bu benim başıma geldi ve neyse ki çıkış yolumu buldum! Buraya cevap vermeye geldim ama sen ilktin. Teşekkürler!!!
Gabriel Piffaretti

9

Ben kaldırıldı zaman Xcode 6.1 bu sorunu karşılaştığı Main.storyboard, LaunchScreen.xibdosya ve varsayılan ViewControllerprojemden sınıfları.

Launch Screen FileVe Main Interfacegirişlerini silerek düzelttimInfo.plist



8

Bunun için her yerde googled. Proje klasörümü masaüstüne taşımamı isteyen 1 ahbapla tanışana kadar cevapların hiçbiri işe yaramadı. Sadece otomatik olarak çalıştı. Görünüşe göre birçok klasör derinliklerine klasör proje varsa, XCODE aslında kırılır.


Daha önce Xcode 6'da aldığımdan beri bu sorunu tekrar Xcode 7 beta 5'te aldım. Bu sefer, bu yöntem benim için çalışıyor.
Jake Lin

1
Görsel stüdyoda da benzer bir sorun var. Ama orada, yolun çok uzun olduğunu ve hiçbir şeyin eklenemeyeceğini veya düzenlenemeyeceğini belirten net bir uyarı mesajı alıyoruz. XCODE ile aynı şey olup olmadığından emin değilim, ancak bu bölümden sonra tüm projelerimi belgelerde veya masaüstünde tutuyorum ve bir daha bu problemi yaşamadım. Bu tavsiyeyi Xamarin Studio kullanan birine bile verdim ve onlar için de çalıştı ...
VBaarathi

7

Bu adımlar benim için işe yarıyor.

1) Türetilmiş Verileri Temizle.
2) .h ve .m dosyalarını kaldırın
3) .h ve .m dosyalarını yeniden oluşturun


Bu benim için de işe yaradı. Türetilmiş verileri temizlemeden bile çalıştırabildim.
jaytrixz

Bu benim için çalıştı, çok teşekkürler Arwin, Ama yine de neden böyle bir hata yarattığını anlamıyorum çünkü daha önce sınıfta veya IB'de hiçbir şey değiştirmedim
Kirtikumar A.

7

Film şeridi dosyamı kaynak kodu olarak açarak ve bilinmeyen sınıfımı aramak ve onunla ilişkili özel sınıfı silmek için komut-F'yi kullanarak bunu çözdüm.


6

@Gfrs'ın söyledikleri doğru, Modülü ayarlamanız gerekiyor. Ancak bir keresinde sınıfımın Classaçılır listede yer almadığı bir sorunla karşılaştım . Sonunda swift dosyasını kaldırdım, Xcode'u yeniden başlattım ve dosyayı yeniden oluşturdum. Sonunda sınıf listelendi ve Storyboard'da kullanılabilir.

Ayrıca karşılaştığım 'gerçek' sorunu çözmek gibi görünen bu cevaba bir göz atın .


Sınıf dosyasını kaldırmak ve yeniden eklemek benim için çalıştı. Teşekkürler!
Nicolas Miari

6

Tüm View denetleyicisi ve görünümleri için kimlik denetçisinin Özel Sınıfına Modül adını yazarak (ne yazık ki açılan liste hiçbir şey göstermeyecek ...) bu sorunu çözdüm.

Hedef sağlayıcıyı da belirtmeniz gerekebilir. Bu hedefe ulaşmak için film şeridini kaynak kodu modunda açabilir ve hem ViewController hem de View açılı ayraçlarına "customModuleProvider" niteliğini ekleyebilirsiniz.


6

Benim çözümüm (Xcode 8.1 Swift 3.0):

Bilinmeyen sınıf xxxInterface Builder dosyasında .

StoryBoard'u Kaynak Kodu olarak açın ve xxx arayın . Xxx değerini içeren özniteliği kaldırın . Oluşturun ve çalıştırın.


O NE LAN? Bu benim için kesinlikle gerekliydi, teşekkürler. Ben silmek zorundacustomModule="" customModuleProvider=""
Dan Rosenstark

1
App store'da böyle bir hata içeren bir uygulama yayınlamaya çalışırsak, uygulama düşünülmeden reddedilir.
ibrahimyilmaz

Katılmıyorum. TestFlight için bu şekilde değiştirmek zorunda olduğum bir yapı gönderdim ve Beta Testi için hazır ... gerçek uygulama mağazasında neler olduğunu göreceğiz, ancak bir IB hata IMO'su. Teşekkürler!
Dan Rosenstark

4

Benim durumumda, ben bir bayrak eklenmiş -ObjCiçin Other Linker Flagsçalışması için proje ayarlarında. Ayrıca -all_loadbayrak ile denedim ve çok iyi çalıştı.

resim açıklamasını buraya girin


3

Benim durumumda, Storyboard / xib'de referans verilen sınıfın Hedef Üyeliği yoktu ayarlanmamıştı.

Düzeltmek için, o sınıfa .hve .mdosyalara diğer sınıflarınızla aynı Hedef Üyeliği verin.

Hedef üyelik ayarlanmadı.


Bu benim sorunumdu, ancak çeşitli çözümleri denerken Epic Byte'nin cevabının çözdüğü soruna neden oldum. Kaynak kodunuzu oluşturduğunuz hedefe sahip olmalısınız, ancak IB'de görünüm denetleyicisini geçerli hedefin bir parçası olacak şekilde ayarlamanız gerekir.
SafeFastExpressive

Hedef üyelik de benim sorunumdu, her yere baktım ama bu cevap sayesinde çözebilirdim.
Borzh



2

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çili olduğundan emin olun

.M dosyamı projeme eklediğimde, herhangi bir nedenden dolayı varsayılan hedefime eklemedi ve bahsettiğim hatayı almama neden oldu.


2

Sorunum kullanıcı hatasıydı. Film şeridimde genel bir UIView vardı ve Kimlik Müfettişinin Özel Sınıf bölümünde yanlışlıkla adı UIView'den anlamsızlığa değiştirdim.

Düzeltmek için gereken tek şey onu tekrar UIView olarak değiştirmekti.


Aynı şeyi yaptım, ancak yanlışlıkla ViewControllers kök görünümünün özel sınıf bölümüne Özel Görünüm Denetleyicileri adını ekledim. Bu yüzden, View Controller'ın tüm zamanların kök görünümü olduğunda neden bulunamadığını görmek istiyordum.
TMin

1

Benim için işe yarayan şey aslında modül adını xib dosyasına eklemektir ...

Yani, xib dosyaları şöyle görünür:

mymodule.MyViewController.xib (Module being the name of the proyect, usually)

KORKUNÇ bir çözüm bence, ama Apple'ın bunu şimdi yapmamızı istediği bu.

Bu soru beta 4'te 3 olası çalışmayı gösteriyor ... görünüşe göre Apple bu duruma bazılarına göre çok yardımcı olmamıştır çünkü buna "Amaçlandığı gibi çalışmak" derler.


1

Xcode Sürüm 6.1 (6A1052d) ile aynı sorunu yaşadım. Sanırım App / Xcode Projenizi yeniden adlandırdıysanız sorun ortaya çıkıyor.

Benim çözümüm modül adını arayüz oluşturucuya manuel olarak eklemekti.


1

Yeni bir hedef ekledikten sonra bu sorunu yaşadım, ardından 'Yeni Dosya' iletişim kutusunu kullanarak yeni bir sınıf oluşturdum, ancak yeni hedefi ve oluşturma iletişim kutusundaki orijinal hedefi yanlışlıkla kontrol edemedim, bu nedenle nesne yalnızca benim orijinal hedef. Çözüm, kaynak dosyaları silmek (yalnızca referansı kaldırmak) ve daha sonra bu sefer her iki hedefi de kontrol etmek için 'Dosya Ekle'yi kullanarak geri eklemekti.

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.