Yüklü uç var ama 'görünüm' çıkışı ayarlanmadı


742

Projeme yeni bir uç dosyası ekledim ve yüklemeye çalıştım.

Ancak, beni oluşturduğum görünüme götürmesi gereken araç çubuğu simgesine tıkladığımda, NSInternalInconsistencyExceptionşu iletiyi içeren bir mesaj alıyorum:

Yakalanmayan istisna 'NSInternalInconsistencyException' nedeniyle uygulamanın sonlandırılması, nedeni: '- [UIViewController _loadViewFromNibNamed: bundle:] "..." ucunu yükledi, ancak görünüm çıkışı ayarlanmadı.'

Bu yüzden uç dosyamı açtım ve hiçbir referans çıkışı ayarlanmadığını görüyorum. Ancak, "yeni referans çıkışı" için daireyi tıklayıp sürükleyip Dosya Sahibine sürüklemeye çalışıyorum, ancak bana izin vermiyor ... görünümümü görüntülemek için ne yapmam gerekir?


1
Önce yapıyı temizlemeyi deneyin.
LetynSOFT

Benim durumumda, gerçek hata, ViewController yöntemine hataya neden olan viewController (- (void) setValue: (NSNumber *) değeri forKey: (NSString *) anahtar) yöntemini tanımlamamdı. Bu yöntemi yeniden adlandırmayı
christian mini

Yanıtlar:


1807

Siz haklısınız, ancak yeni gelen biri olarak bunu yapmak için tüm adımları anlamanız biraz zaman aldı. İşte benim için işe yarayan:

  • Sorunlara neden olan XIB dosyasını açın
  • Sol çubuktaki dosyanın sahibi simgesini tıklayın (üstteki sarı çizgili kutuya benziyor)
  • Sağ taraftaki kenar çubuğunu görmüyorsanız, araç çubuğunuzda "görüntüle" nin üzerindeki üçüncü simgeyi tıklayın. Bu sağ taraftaki kenar çubuğunu gösterecektir
  • Sağ taraftaki kenar çubuğunda, biraz gazete gibi görünen üçüncü sekmeyi tıklayın
  • Üstteki "Özel Sınıf" altında, Sınıf'ın bu görünüme karşılık gelmesi gereken ViewController adı olduğundan emin olun. Değilse girin
  • Sağ taraftaki kenar çubuğunda, son sekmeyi tıklayın - içinde ok bulunan bir daireye benzeyen sekme
  • Altında "görünümü" olan "çıkışları" görmelisiniz. Yanındaki daireyi sol çubuktaki "görünüm" simgesine sürükleyin (altta, kalın gri anahatlı beyaz bir kareye benziyor
  • Xib'i kaydedin ve yeniden çalıştırın

Ben de kakao ile ilgili bu sorunla karşı karşıya kaldım ve görünüm görünüm hiyerarşisine yüklenmemiş / eklenmedikçe, tüm görünüm çıkışları NIL idi. AddSubview veya benzeri bir şeyi çağırdıktan sonra tüm çıkışlar bağlandı. Hikayemin komik kısmı po viewcontroller.view.subviews eksik nesneleri gösterdi.
Apoc

11
Bu çözüm, adım 4 ve 5'ten itibaren Xcode 7.3'te artık çalışmıyor. Bunun yerine, arayüz oluşturucuda, Kontrol Etme dosyasını dosyanın sahibinden Görünümünüze sürükleyin.
PeiweiChen

2
Benim için işe yaramadı (bağlantı müfettişinde çıkışlar bölümü yok, bu nedenle bağlanmak için çıkışların altında "görünüm" yok), ancak yanıtınıza verdiğiniz çaba için +1. :)
William T. Mallard

2
Çıkışlarda "görünüm" görmüyorsanız, dosya sahibinden film şeridindeki görünüme ctlr-sürükleyebilirsiniz. "Görünüm" seçeneğiyle bağlamsal bir menü görünmelidir
josef

1
@ WilliamT.Mallard Ben de aynı davranışa sahibim. MyViewControlleralt sınıfının bir alt sınıfıdır UIViewControllerve view"Çıkışlar" altında bir alt sınıf yoktur . MyViewControllerDoğrudan alt sınıf UIViewControllergörünümden "Çıkışlar" görünür. Büyü veya Xcode hatası.
user2319066

201

Bu Josh Justice önerisidir, ancak grafiksel olarak (resimler benimdir):

  1. Dosya sahibini seçin
  2. Sağ taraftaki panelde özel sınıfı seçin.
  3. Özel sınıf adını girin

resim açıklamasını buraya girin

  1. Sağ taraftaki panelde oultetleri seçin
  2. Bileşeni görüntülemek için görünüm çıkışını sürükleyin

resim açıklamasını buraya girin

Son olarak, View Controller, döner kodla başlatılır:

        PTFilterUserVC *aFilterUserVC = [[PTFilterUserVC alloc] initWithNibName:@"FilterVC" bundle:nil];

        //OPTIONAL.This is how 'I' am interested in present the view controller.
        [self.navigationController pushViewController:aFilterUserVC animated:YES];

1
Teşekkürler Javier Calatrava Llavería ... bir saat boyunca kafama çarptıktan sonra bana çok yardımcı oldu !!!
BharathRao

un exito muchas gracias
Bruno Sosa Hızlı Etiket

5. adımı kaçırdım
hamada147

73

Genellikle Dosya Sahibi ile görünüm arasındaki bağlantıyı yeniden düzeltebilirim. Kontrol Etme Dosya sahibinden Görünümünüze (IB'de) sürükleyin ve açılır menüden görünümü seçin.


62

Kimliği Göster - Sınıf Kimliği ayarlanmadı. Uygun sınıfa ayarlandıktan sonra sorun çözüldü.


Merhaba @ John, bunu yaptım ama hala bu istisnayı alıyorum.
Mansuu ....

29

ViewController'ınızın "view" özelliğine atanmış bir UIView (veya alt sınıf) olduğundan emin misiniz?

ViewController için xib'in sol bölmesinde "Dosya Sahibi" ne sağ tıklayın ve "görünüm" çıkışının ayarlandığını doğrulayın. Değilse, bir görünüme ayarlayın!

bu, Sorunu kesinlikle düzeltir


2
Açık, özlü cevap.
sark9012

15

Benim için burada belirtilen her şey https://stackoverflow.com/a/6395750/939501 doğruydu ama yine de hata atıyordu, nedeni ABCView adıyla bir View sınıfı oluşturdum ve daha sonra sildim ABCViewController bir şekilde yeni görünüm denetleyicisindeki eski ABCView'e atıfta bulunuyordu, ABCViewController'ı silmek ve sorunumu çözen farklı bir adla yeni bir tane eklemek zorunda kaldım.

Teşekkürler


2020'de hala bir hata.
Tamás Sengel

15

Aynı sorunu XCode 4.6.3 ile yaşadım. Ben adında bir çift dosyaları ile başlamıştı MySettingsView.hve .mancak lehine bunları silinmiş MySettingsViewController.h, ama ipuçları çoğu burada bahsedilen denedikten rağmen, hala ile erroring tuttu

2013-07-05 11: 48: 17.205 Uygulamam [39024: c07] *** Yakalanmayan 'NSInternalInconsistencyException' istisnası nedeniyle uygulamanın sonlandırılması, nedeni: '- [UIViewController _loadViewFromNibNamed: bundle:] "MySettingsView" ucu ancak görünüm çıkışını yükledi ayarlanmadı. '

Açıkçası hala "karışık", MySettingsView Controller .xib yerine MySettingsView.xib yüklemeye çalışıyor . Belki de "ne demek istediğimi yap" mantığı çok süslüdür.

Bu yüzden MySettingsViewController.m NIB / XIB adını sabit kodlama ile sorun etrafında çalıştı:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:@"MySettingsViewController" bundle:nibBundleOrNil];
}

10

UIView oluşturmak için bir xib yöntemi kullanan ve bu sorunu yaşayan herkese, bağlantı denetçisi menüsü altında "view" çıkışına sahip olmayacağınızı fark edeceksiniz. Ancak, Dosya Sahipleri özel sınıfını bir UIViewController olarak ayarlarsanız ve daha sonra "view" çıkışını görürsünüz, yalnızca CMND'nin CustomView'a bir çıkış bağlayabilirsiniz.


Muhteşem. Çok teşekkür ederim. Bu kabul edilmiş bir cevap olmalı!
Roman

7

Bu sorunum, sınıf klasöründe görünüm kümesi olmayan yinelenen bir uç olması nedeniyle oluştu. xcode bir derleme için bir uç seçti ve sonra projeyi bir sonraki inşa ettiğimde diğerini seçiyor gibiydi. Sadece diğerini sildim. İyi görünüyor. Doh!


6

Sadece görünüm özelliği neden uçtan başlatıldıktan sonra görünüm denetleyicimde ayarlanmadığını öğrenmeye saatten fazla zaman harcadı. Görünüm denetleyicinizin initWithNibName içinde "[super initWithNibName ...]" demeyi unutmayın.


5

Bunu benimkinde düzelttim. Büyük proje, iki dosya. Biri "ReallyLargeNameView", diğeri "ReallyLargeNameViewController"

Yukarıda seçilen 2. cevaba dayanarak yapımı temizlemem gerektiğine karar verdim. Nada, ama hala XCode'dan şüpheleniyordum (iki özdeş sınıfım olduğu için onları soyutlamalı ama ha ...) Yani biri çalışıyor, biri değil. Dosyanın sahibinin adları kopyalanıp yapıştırıldığı, çıkışların yeniden düzenlendiği, xCode'un yeniden başlatıldığı, hala hiçbir şey olmadığı kadar.

Bu yüzden benzer adlandırılmış sınıfı (bir görünümdür) silerim. Yakında, yeni hata "içinde çengel değil çıkış" tam olarak "webView anahtar değeri değil" blah ... temelde "Visual Studio daha iyi" diyordu. Her neyse ... Daha küçük olan dosyayı siliyorum ve bam, işe yarıyor.

XCode benzer adlı dosyalar tarafından karıştırılır. Ve proje biraz yeniden başlatılmak için yeterince büyük, bunun bir parçası olabilir.

Keşke "XCode karıştı" daha teknik bir cevap vardı, ama iyi, xCode bu noktada çok karışır. Aynı şekilde küçük bir çocuğa yardım edeceğim. Şimdi çalışıyor, :) Yukarıdaki hiçbir şey düzeltmezse başkalarına fayda gerekir.

Her zaman yapılarınızı temizlemeyi unutmayın (simülatörü de silerek)


4

Ben de aynı sorunu vardı ve benim sorunum Yerelleştirme Almanca ile benim App bulamadı Yerelleştirme İngilizce ile nib bulamadık başka bir Yerelleştirme (İngilizce) ViewControllers uç ekledi oldu! Umarım bu herkese yardımcı olur!


4

Yanlışlıkla xib referansını silerken aynı problemle karşılaştım ve tekrar ekledim.Sadece Dosya sahibi ile görünüm arasında bağlantı kurarak düzelttim.Ayrıca FilesOwner'in özel sınıfınızın beklenen viewController olduğundan emin olun.


3

Benim için sorun aramadan kaynaklandı initWithNibName:bundle:. Oturmak giriş formları tanımlamak için bir nib dosyasından tablo görünümü hücreleri kullanıyorum tableViews. Bir görüşüm olmadığından birine takmak mantıklı değil. Bunun yerine, eğer initWithStyle:yöntemi çağırırsam ve oradan, nib dosyasını yüklerim, o zaman işler beklendiği gibi çalışır.


3

Önceki cevaplar benim için problemi neredeyse çözdü, ancak son adım eksikti.

  1. Aynı ada sahip bir xib ve swift dosyası oluşturun.

Görünüm ve Hızlı Dosya Ekle

  1. Dosya sahibini UIView alt sınıfı olarak ayarlayın.

resim açıklamasını buraya girin

  1. Bir çıkışı Görünüm'den UIView alt sınıfına sürükleyin ve "contentView" olarak adlandırın

içerik görünümünü ekle

  1. Bu özel başlatıcıyı, xib yüklendiğinde içeriği ekleyecek şekilde ekleyin

içerik görünümünü alt görüntüleme olarak ekle

required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        Bundle(for: self.classForCoder).loadNibNamed("SampleView", owner: self, options: nil)
        addSubview(contentView)
        contentView.frame = self.bounds
        contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
    }

Şimdi eklediğiniz herhangi bir @IBOutlet eklenir.

Şerefe, Richard


2

Aynı problemim vardı, ama biraz farklı bir çözüm gerekiyordu. Bu durumda sorun, Görünüm sınıfı yerine Dosya Sahibi'nin sınıfıydı. Bunu ayarlamak için, Arayüz Oluşturucu penceresinin sol alt köşesindeki "geriye oynat" simgesine tıklamak zorunda kaldım ve daha sonra Dosya Sahibi, İlk Yanıtlayıcı ve Görünüm özelliklerini izole eden seçenekler ortaya çıktı. Birincisine (büyük şeffaf bir kutu) tıklamak, daha sonra özel sınıfını yukarıda önerildiği gibi ayarlamamı sağladı.


2

Aynı problemim vardı, ama farklı bir çözüm gerekiyordu. Bu durumda sorun, Dosya Sahibinin sınıfının xib dosyasına bağlı olmamasıydı.


2

Bu gece bir Swift UIViewController alt sınıfı ile çok benzer bir şeyle karşılaştım. Bu durumda, yukarıdaki düzeltmelerin hiçbiri işe yaramadı, ancak kodumu biraz yeniden sıraladı. Net-net, alt sınıfa bir uzantıya sahip olmak, alt sınıfın aynı dosyadaki tanımının kendisinden önce, ince derlemeye rağmen XCode'u karıştırıyor gibi görünüyor; düzeltme, uzantıları alt sınıfın tanımından sonra yerleştirmekti.

Benzer soruya cevap olarak ayrıntıları gönderdim .


2

Benim durumumda, belirlenen başlatıcı - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil *** ViewController sınıfında belirtilen başlatıcı, nesneyi başlatmak için başka başlatıcı çağırdığımda bile, atanmış başlatıcı çağrılır.

Bu sorunu çözmek - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNiliçin de uygun bir yol olup olmadığını kontrol edin .


2

Bu soruna, buradaki diğer cevaplardan biraz farklı bir şekilde rastladım.

Basitçe yeni bir xib dosyası oluşturduysam, Interface Builder'da bir UIViewController ekledim ve "view outlet set" ayarlanmayan kilitlenmeyle sonuçlanan UIViewController'ın özel sınıfını görünüm denetleyicime ayarlayın. Buradaki diğer çözümler görünüm çıkışını Görünüm'e sürükleyip sürüklediğini söylüyor, ancak benim için görünüm çıkışı gri renkte çıktı ve bunu sürükleyemedim.

gri renkli Görünüm çıkışı

Benim hatam Arayüz Oluşturucu bir UIViewController eklemek olduğunu anladım. Bunun yerine, bir UIView eklemek ve Dosya Sahibinin Özel Sınıfını görünüm denetleyicime ayarlamak zorunda kaldım. Sonra Dosya Sahibinin görünüm çıkışını yeni görünümüm UIView'e sürükleyip bırakabilirim ve her şey olması gerektiği gibi çalıştı.


1

Projemde sadece aynı hata vardı, ama farklı bir sebep. Benim durumumda, özel UITableViewController sınıfımda "Görünüm" adında bir IBOutlet kurulumu vardı. Bu temel sınıfın bir üyesi olduğu için "view" özel olduğunu biliyordum, ama View (farklı vaka) da bir sorun olacağını düşünmüyordu. Bazı kakao alanları büyük / küçük harfe duyarlı değildir ve muhtemelen bir xib yüklemek bu alanlardan biridir. Bu yüzden onu DefaultView olarak yeniden adlandırdım ve şimdi hepsi iyi.


1

dosya sahibini seçin ve kimlik denetçisini açın, karşılık gelen sınıf adını verin. Yukarıdaki yöntemlerden hiçbiri işe yaramazsa ve yine de görünüm çıkışını göremiyorsanız, yeni başvuru çıkışını Dosya Sahibine Bağlantı verin, sonra görünüm çıkışını görebilirsiniz. Görünüm Çıkışı ile Dosya sahibi arasında bağlantı kurmak için Görünüm Çıkışı'na tıklayın. Bu iyi çalışır Uygulamayı çalıştırın.


1

Benim durumumda, görünüm xib'de görüntülenmedi. xib'de Görünüm boyut = yok (4. sekme sağ taraf) idi. Boyutu Freeform olarak ayarladım ve xCode'u yeniden yükledim. view temyiz edildi ve View'a doğru bağlantıyı ayarladım.


1

Her şeyi denediyseniz ve yine de bu hatayı alıyorsanız, sınıf dosyasını sıfırdan yeniden oluşturmayı deneyin, ancak "Ayrıca XIB dosyası oluştur" onay kutusunu seçmeyi unutmayın. Bu, bu dosyaları ayrı ayrı oluştururken bağlı olmayan birkaç öğeyi otomatik olarak bağlar. Bu oluşturulduktan sonra, her şeyi kesip yeni XIB'ye yapıştırabilirsiniz ve iyi çalışmalıdır.

Bu sorunu özellikle Swift'te ayrı ayrı dosya oluşturma konusunda buluyorum.


1

benim için oldu, ne zaman

  • Nib dosyası ile ilişkili bir ViewController sınıfı (.mm / h) var,
  • Bu ViewController'dan gelen UIView , başka bir görünüme alt görünüm olarak yüklenmelidir,

  • böyle bir şey diyeceğiz

    -(void)initCheckView{
    
       CheckView *pCheckViewCtrl = [CheckView instance];
    
       pCheckView = [pCheckViewCtrl view];
    
       [[self view]addSubview:pCheckView];
    
       [pCheckViewCtrl performCheck];        
    
    }

Nerede

+(CheckView *)instance{
    static CheckView *pCheckView = nil;
    static dispatch_once_t checkToken;

    dispatch_once(&checkToken, ^{
        pCheckView = [[CheckView alloc]initWithNibName:@"CheckView" bundle:nil];
        if ( pCheckView){
            [pCheckView initLocal];
            **[pCheckView loadView];**
        }
    });

    return pCheckView;

}

Burada loadView eksik ,,, bu satırı eklemek sorunumu çözdü.


1

Ben de aynı sorunu vardı, anladım ve bunun nedeni, İçerik seçeneği altında Tablo Görünümü özelliklerinde " Statik hücreler " i işaretlemişti . " " Olarak değiştiğinde çalıştı . Ekran görüntüsü aşağıdadır. Dynamic Prototypesresim açıklamasını buraya girin


1

Xcode 9.3 ile benzer bir sorun vardı ve proje modülüne "Dosya Sahibi" öznitelik müfettişi altında "Modül" ayarlama benim için bu düzeltildi.


1

Senin aç film şeridi sizin viewController zaten dosyasını veya XIB ile ilgili dosyayı textEdit.app tasarrufu ve yeniden / Xcode yeniden başlatın ve film şeridi veya XIB adı viewController aynı olup olmadığını kontrol et, sonra değiştirin.


1

Özel bir başlatma yöntemi kullanıyorsanız, geçerli bir şey döndürüp döndürmediğinizi kontrol edin. Ben böyle bir şey çöktü kod parçası koştu:

- (id)init {
   self = [super init];
   if (self) {
      CustomController *controller = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(className) owner:self options:nil];
   } return self;
}

Başka bir sınıfta, denetleyici şöyle oluşturuldu:

CustomController *controller = [[CustomController alloc] init];

Sorun, init yönteminde kendiliğin değişmediği ve bunun yerine şöyle görünmesi gerektiğidir:

- (id)init {
   self = [super init];
   if (self) {
      CustomController *controller = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(className) owner:self options:nil];
      [controller viewDidLoad];
      self = controller;
   } return self;
}

0

İkinci Stephen J'i istiyorum. Bazen X Code'un kafası karışıyor. UI ile çok fazla oynadığım bir deneyim yaşadım ve çıkışları birkaç kez ekleyip sildim. Prizler artık kablolamayacaktı. Asla belirli bir neden bulamadım (yukarıdaki tüm çözümleri denedim) ve sadece NIB'yi silmek ve sıfırdan yeniden oluşturmak zorunda kaldım ve aslında NIB için işe yaramadan önce farklı bir isim kullanmak zorunda kaldım. (XCode 4.6.1) Bunun için birkaç saat harcadım.

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.