“ViewController adlı sınıf için herhangi bir bilgi bulunamadı”


154

Xcode (4.6.3) kullanmaya başladığımdan beri bu hata beni deli ediyor. Bir Storyboard öğesini koduma bağlamaya çalıştığımda hatayı alıyorum:

ViewController adlı sınıf için herhangi bir bilgi bulunamadı.

Bu, özel sınıflarda da olur. Gibi yöntemleri denedim:

  • Delege verilerini silme.
  • Sınıfları kaldırma ve yeniden ekleme.
  • Xcode yeniden başlatılıyor.
  • Xcode yeniden yükleniyor.

Sınıf ne olursa olsun projelerimden herhangi birinde bağlantı oluşturmak için ctrl tuşuna basıp sürükleyemiyorum. Aynı sorun yepyeni bir şablon uygulaması için de geçerlidir. Kodu manuel olarak girip sonra ctrl-drag, çalışan bir bağlantı kurabilirim, ancak otomatik olarak ekleyemiyorum. Şimdiye kadar internette bulabildiğim hiçbir şey yardımcı olmadı. İşaretçi var mı?


ViewController .m dosyasının uygun hedefe dahil edildiğinden emin misiniz? (sağ denetçi panelindeki onay kutusu)
Alfie Hanssen

2
Film şeridinizde bir görünüm denetleyiciniz var ve görünümü yönetmek için başlatılması gereken sınıfın adı için "ViewController" belirtilmiş. Film şeridindeki her görünüm denetleyicisini kontrol edin: görünüm denetleyicisini seçin, sağ bölmedeki "kimlik denetçisine" ve "Özel Sınıf" özelliğine bakın. "ViewController" yazıyorsa, sorun var demektir. Görünüm denetleyicinizi yönetmesi gereken sınıfın adını veya varsayılan UIKit uygulamasını almak için UIViewController'ı girin.
Nicholas Hart

1
Özel sınıfı kimlik denetçisinde "UIViewController" olarak değiştirdim ve artık film şeridinden ViewController.h dosyasına ctrl tuşuna basıp sürükleyemedim. Ben yeni bir sınıf oluşturmak ve içine ctrl-drag (buna göre görünüm denetleyicisi sınıfını buna göre ayarladıktan sonra) çalışırsanız, aynı "Herhangi bir bilgi bulunamadı" hatası alıyorum.
user2597451

4
Bu sorun vardı ve otomatik oluşturulan ViewController sınıfını değiştirmek benim için çalıştı. Örneğin sadece eklemek NSLog()içinviewDidLoad:
jb

Yanıtlar:


292

Benim için bu sorunu çözen şey aslında projeden sınıfı silmekti.

Adımlar:

  1. Proje dosya gezginde (sol panel) sınıfı bulun ve sağ tıklayın -> Sil
  2. Referansı kaldırın (sınıfı iyice kaybedeceğiniz için çöp kutusuna taşınmayın)
  3. Sınıfı içeren klasörü sağ tıklayın -> Dosya ekle ...
  4. Dosya sisteminde az önce sildiğiniz sınıfı bulun

Bu, Xcode'u sınıfı film şeridine yeniden bağlamaya zorlar gibi görünüyor.

Not: Benim için şu did not çalışmak:

  • Xcode kapatılıyor
  • Projeyi temizleme
  • Sınıf adını film şeridinden silme ve yeniden girme

Bence bu Apple'ın bir hatası


8
Bunu denedim, ama benim için çalışmadı / -: aynı hata.
Michael

1
@Michael, Evet, şimdi yukarıdakilerin hiçbirinin işe yaramadığı bir durumdayım. Xcode is a ***
Chris Harrison

5
Bu sayı Temmuz 2013'e kadar uzanıyor, bugün Mayıs 2016 itibariyle aynı hatayı alıyorum ve bu cevapla düzelttim. Nasıl bu kadar yıl geçtikçe Apple bunu düzeltmiyor?
SkyWalker

3
Bunun hala bir sorun olduğuna inanamıyorum. Sadece bunu XCode 8.1'de yapmak zorunda kaldım ..
fisk

2
2017 (Sürüm 8.2 (8C38)) ve hala hayatta, Xcode SUCKS. UI personelini film şeridinden bir sahneden diğerine kopyalayıp yapıştırdığınızda bana oluyor
Jaime Agudo

135

Herhangi birinin hala bundan dolayı hayal kırıklığına uğraması durumunda, işlerin çalışmasını sağlamak için bir hile vardır.

Yaptığım şey, örneğin sınıfıma manuel olarak bir çıkış girmek ve koddan IB veya film şeridindeki görünüme @IBOutlet weak var someView: UIView!sürüklemek . Bundan sonra, bağlantı yapmak için IB / Storyboard'dan sınıfıma sürükleyebiliyorum, yardımcı editörler sınıfı "Otomatik", vb.

Her zaman çalışır.


6
@ Gmeister4, kodunuzda bir çıkış oluşturursanız, çıkışın solunda küçük bir daire gösterir. Bağlantınızı yapmak için bu daireyi tıklayıp IB veya Öykü Tablosundaki görünüme sürükleyin.
Andrew Robinson

4
Üst yanıttan daha kolay. +1
cph2117

2
Hala bundan sonra bile düzgün bir şekilde yapamıyorum - ama en azından bu işe yarıyor!
Alexandre G

1
Yukarıdaki cevapların hiçbiri benim için işe yaramadı. Sadece bu cevap benim için çalıştı.
coolcool1994

1
Harika, hepsi bu!
Sam

38

Benim için onları sağ sütundaki hedef üyeliğinizden kaldırmak ve tekrar eklemek hile yaptı resim açıklamasını buraya girin


Bu da benden işe yaradı. ViewController.swift sınıfını çoğaltmıştım ve bu çözüm gibi görünüyor.
UberJames

Ben Xcode 8.0 hala var Xcode bir hata olduğunu düşünüyorum
jiangjiefs

Bu şimdi Xcode 8.3.3'te başıma geldi ve çözümünüz en basit ve işe yarıyor. Çok teşekkür ederim !!!
RoberRM

Hala Xcode 11.5'te var (Cidden Apple ?? demek). Sadece benim için çalışan çözüm burada listelenmiştir.
Christophe Fondacci

12

Bazen XC, VC'nin sınıf dosyasına başvurmadığı için yapar. Bunun için basit çözüm:

özelliği belirtildiği gibi manuel olarak yazın.

class YourClassName{

     @IBOutlet weak var YourTableName: UITableView!

}

Bu, @IBOutlet'ten önce boş bir bağlantı işareti yapar , projenizi yardımcı editörde açar, ardından bağlantı işaretini tıklatın resim açıklamasını buraya girinve bağlanmak istediğiniz Görünüm'e sürükleyin (TableView ile bağlandım). ve bu kadar. Mutlu Kodlama keyfini çıkarın !!!


8

Bu sorunu Nisan 2017'de Xcode 8 ile yaşadım

Basitçe kod yoluyla bir çıkış oluşturmak ve derlemek düzeltti. Örneğin:

@IBOutlet weak var containerViewHeight: NSLayoutConstraint!

Xcode'u sevmelisin…

Düzenleme: Xcode 9'da hala oluyor


7

aşağıdaki adımlar benim için çalışıyor umarım sizin için de çalışır

1- Xcode'u kapattıktan sonra projenizi yeniden açmanız gerekiyor.

2- Proje dosyalarının endekslenmesini bekleyin

3- Çalışıp çalışmadığını kontrol edin

4- Hala çalışmıyorsa sizin için mutlu değilse 5. adımı uygulayın :)

5- Proje hedefinizi temizleyin ve oluşturun

resim açıklamasını buraya girin


7

Her şeyi denedim ve işe yaramadı, bu yüzden benim için işe yarayan şey:

  • Derleme klasörü ve proje temizleyin.
  • Açık Projeler (Pencere -> Projeler)
  • Projenizi listede bulun ve Türetilmiş Verileri silin
  • Xcode'u kapat
  • Bilgisayarı yeniden başlatın (açık pencereleri yeniden açmayı seçmeden)
  • Xcode'u çalıştır
  • İş!

Tüm görünüm denetleyicilerim tanınmıyor, bu nedenle tüm dosyaları silmek ve yeniden eklemek bir seçenek değildi, çünkü bu büyük bir proje.


4

Benim için aşağıdakiler işe yaradı:

  1. 'Temiz klasör' temizle komutunu almak için 'temiz' ve 'temiz klasör oluştur' (Ürün menüsünde 'seçenek' tuşuna basın

  2. Xcode'u durdur

  3. Terminalde, türetilen veri klasörüne gidin:

    (/ Kullanıcılar // Library / Geliştirici / Xcode / DerivedData)

Projeniz için türetilmiş veri dizinini silin.

  1. Havadaki ölü tavuk

  2. Xcode'u başlat


3

Şimdiye kadar birkaç cevaptan oluşan bir kombinasyon yapmak zorunda kaldım:

  1. Özel sınıf adını film şeridinden kaldırın.

(Film şeridinde görünüm denetleyicisinin sol üst tarafındaki sarı düğmeyi tıklayın -> kimlik denetçisine gidin (seçenek + komut + 3) -> üstteki özel sınıf adını silin)

  1. Görünüm denetleyicisi dosyasına başvuruyu kaldırın.

(Dosyayı sağ tıklayın -> sil -> referansı kaldır)

  1. Görünüm denetleyicisi dosyasını projeye geri ekleyin.

(Dosyanın bulunduğu klasörü sağ tıklayın -> "[projeye] dosya ekle")

  1. Özel sınıf adını film şeridine geri ekleyin.

3

İnsanlar yukarıdakileri denerse ve işler hala çalışmıyorsa, benim için işe yarayan garip hile, bir boşluk boşluğuna çıkış ekliyordu. Eklediğiniz satırın hemen üstünde veya altında başka satır yoksa çalışır. Garip, ama işe yaradı!


3

Benim için işe yarayan şey, bağlantıyı düğmeden koda sürüklemek yerine:

  1. İstediğiniz film şeridi öğesini tıklamak.
  2. Bağlantı denetçisini açma (sağ panel)
  3. + Çemberinden kod alanına sürükleme. Şöyle ki:

kodumu bu şekilde bağladıktan sonra, bundan sonra normal şekilde çalıştı.


3

Hedefe kitlen!

Bir Xib ile yeni bir sınıf ekliyordum ve bu sorunu görmeye başladım ve buradaki cevapları inceleyerek ve bunun herhangi bir fark yaratıp yaratmadığını görmek için iyi zaman geçirdim.

Olduğu gibi, çalışma alanımda birden fazla hedefim var ve genellikle bunlar arasında geçiş yapmak zorundayım.

Yeni dosyalar eklemenin Xcode'da yeniden endekslenmeye başlayacağı ortaya çıkıyor. Ancak yanlış hedefe işaret ediyorsanız, indekslemenin anlamsız olması muhtemeldir ve Xcode'u bağlamak için sürükleme sırasında sınıfınızı bulamazsınız.

Kısacası

Aşama 1.

Hedef Seçimi

Dizin oluşturmanın anlamlı olması için doğru hedef ayarladığınızdan emin olun.


3

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

  1. 'Gerçekleştirin Temiz inşa klasörü '
    (basın ve 'seçeneği' tuşunu basılı tutun ve "gidin Ürün erişimi o kadar" menüsünden.
  2. " Ürün " menüsünden basit bir "Temizle" (CMD-SHIFT-K) gerçekleştirin .
  3. Xcode dosyaları derlemek için proje oluşturun . Ayrıca, gerekirse dosyaları dizine eklemesine izin verin.

Bir yan notta, bunun yardımcı olup olmadığından emin değilim, ancak yukarıdaki adımları gerçekleştirmeden önce Türetilmiş verileri de sildim (Xcode tercihleri> Konumlar)


2

StoryBoard'da ViewController'ı seçin, Sağ panel / "Müşteri sınıfı" / "sınıfı" ndaki geçerli değeri silin, ardından kontrol sınıfını yeniden ekleyin (tür: "SampleViewController" ...), girin. -> Bu iş benim için


2

Tüm bu cevapları denedim, benim için sorun Xcode dosyaları endekslemek mümkün değildi ile ilgili. Bunu Xcode'dan çıkıp projeyi tekrar açarak çözdüm. Tabii ki yukarıdaki tüm çözümleri denedikten sonra yaptım: p


2

Ürün> Clean (Command - Shift - K) benim için düzeltti!


2

Bu, bu sorunu gidermek için yaptığım en kolay adımdır.

  1. Projeyi temizliyorum
  2. Görünüm denetleyicisine yeni bir düğme sürükleyin.
  3. Projeyi derleyin.
  4. Yeni sürüklenen düğmeyi sınıfa bağlayın (çıkış veya eylem).
  5. Sonra voila !!! Diğer çıkışlar artık sınıfa tekrar bağlanabilir!

1

Test deneyimim olarak, Xcode ile ilişkilendirilmiş bir sınıfı silerseniz ve tekrar dosya eklemek yerine, bu sorun ortaya çıkar.


1

Genellikle bu bana geldiğinde henüz sınıfın kodunu henüz kaydetmedim. Sadece koda atlayın ve cmd + s tuşlarına basın ve genellikle sorunu doğru şekilde düzeltir.



1

Yukarıdaki adımların hiçbiri benim için işe yaramadı, ancak bence sorunu keşfetmiş olabilirim. En azından benim için işe yarayan şey bu ve Xcode'da bir hata değil.

Yardımcı editördeyken, viewController kodunu içeren pencerenin üst kısmına bakın. Sağdan üçüncü seçenek büyük olasılıkla "Manuel" der, ancak "Otomatik" demelidir. Bunu değiştirdiğimde sorun çözüldü!


1

Benzer bir sorun alıyordum, "... adlı bir sınıf bulunamadı." Öğeden arayüze sürüklemediğinizden emin olun - sınıfın kendisine sürüklendiğinden emin olun


1

HER ŞEYİ denedim!

UIViewController'ınızın sınıf adının "Test" kelimesini içermediğinden emin olun

Hata Raporu gönderildi.


Kesinlikle bunun tek neden olduğunu söylemiyorum. Bunun farkında olması gereken başka bir şey olduğunu.
Aaron Kreipe

Benim için tüm türetilmiş verileri silmek için yardım, temiz proje. Ama bu bir hata ve haklısın.
Genevios

0

Söz konusu .m ve .h dosyalarını yeniden oluşturmaya ve onlara "ViewController" gibi genel değil, orijinal bir ad vermeye çalışacağım. Dosyanın yapmasını istediğiniz şeylerin satırlarında daha fazlasını deneyin ve Görünüm Denetleyicisi'nde (ör. "PizzaDecoraterViewController")

Ardından, bu dosyalara bağlanmak istediğiniz ViewController'ı seçin. Yalnızca içindeki bir nesneyi değil ViewController'ı seçtiğinizden emin olun. Alttaki siyah çubuğu tıklayın ("İlk Yanıtlayıcı" ve "Çıkış" simgeleri olan çubuk). ViewController'ın tamamı mavi çerçeveli olmalıdır. Ardından Kimlik Denetçisindeki Özel Sınıf bölümüne gidin ve ilk alanda gri bir "UIViewController" görmeniz gerekir. Bu alana, bağlanmasını istediğiniz .h veya .m dosyasının adını yazın (PizzaDecorator yazmaya başlayın ... ve küçük bir otomatik tamamlama işlemi yapmalıdır). Ardından ENTER tuşuna basın.

Yardımcı Düzenleyiciyi açtığınızda, sürüklemeye ve bırakmaya çalıştığınız dosyanın aslında doğru dosya olduğundan emin olun.

Yukarıda belirtildiği gibi hepsini yaptıysanız, o zaman işe yaramalıdır.


Maalesef hala çalışmıyor. Bunu daha önce boşuna yapmaya çalıştım. İşte bir ekran görüntüsü: i.imgur.com/5ixtcps.png
user2597451

Huh. Garip. Bunları programlı olarak eklemeyi deneyin (yani @property (anatomik olmayan, güçlü) IBOutlet UIView * testi;) ve ardından yanında küçük daire göründüğünde UIView'inize sürükleyip bırakın.
CaptJak

Bu işe yarıyor ve her zaman var (ve uygulamalar iyi çalışıyor gibi görünüyor), ancak otomatik olarak eklenmeyecek sorunu çözmeye çalışıyorum.
user2597451

Eğer böyle çalışırsa, o zaman başka şekilde çalışmalıdır. XCode'unuzdaki hata? Önceki bir sürümü (4.6.2 veya benzeri bir şey) almaya çalışın ve yükleyin. Aksi takdirde, ummmmmmmmmmmmmmm ...... evet ....
ummmmmmmmmmmmmmm

Evet, bundan korkuyorum. Kaldırma ve yeniden yükleme işlemi çalışmıyor, bir hata yaptığımı umuyordum. Xcode kopyamı eski sürüme geçirmenin en iyi yolu nedir?
user2597451


0

Dosyaları silin (yalnızca referanslar) ve dosyaları tekrar ekleyin.


0

Benim durumumda, işe yarayan şey (bir litle garip, ama çalıştı) şudur:

Bir veri kaynağı (ör. ViewController'a UITableViewDataSource gibi bir uzantı) eklemeyi deneyin. Xcode, ViewController'ı yeniden yüklemeye çalışır. Daha sonra protokolün bazı yöntemlerini yazdım (başlangıçta Xcode yöntemleri otomatik olarak tamamlamadı, ancak manuel olarak yazdı), sonra IBOutlets'i ekledim ve son olarak veri kaynağını kaldırdım.

Misal:

class TestViewController:UIViewController{
    // This viewController presents “Could not find any information for  class named ViewController”
}

extension TestViewController:UITableViewDataSource{
    //Add Some methods of the protocol, Xcode will try to autocomplete and then it's going to reload the class, from then you can add your IBOulets / Actions .. And remove this extension if you don't need it otherwise.
}

0

Benim için özel bir sınıf belirlediğim görünüm, arayüz oluşturucu tarafından derlenemedi. İşaretlendi @IBDesignable.

Çıkarma @IBDesignableve sonra çıkışlarımı ekleme ve sonra işaretleme @IBDesignablebenim durumumda sorunu çözdü.



0

sadece şunu dene

rm -rf ~/Library/Caches/com.apple.dt.Xcode
defaults delete com.apple.dt.Xcode IDEIndexDisable
defaults write com.apple.dt.Xcode IDEIndexEnable 1 
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.