Pakette NIB yüklenemedi


111

Janrain Engage'i özel modül olarak Appcelerator Titanium ile entegre etmeye çalışıyorum. Örnek bir modül oluşturdum ve JREngage klasörünü Jainrain belgelerinde belirtildiği gibi xcodeproj örnek modülüne sürükledim.

Şimdi bu projeye build komutunu veriyorum, sonra çalıştırıyorum ve en ./build.pysonunda titanium runkomutu çalıştırıyorum . Uygulamayı simülatörde boş bir ekranla başlatır ve hemen aşağıdaki hatayı vererek çöker.

'NSInternalInconsistencyException' istisnası nedeniyle uygulama sonlandırılıyor, neden: 'Pakette NIB yüklenemedi:' NSBundle </ Users / abhilash / Library / Application Support / iPhone Simulator / 4.2 / Applications / CA167346-4091-4E16-B841-955D1D391713 / 'JRProvidersController' adıyla test.app> (yüklendi) '

Bu hata neden oluşuyor olabilir?

Yanıtlar:


213

Dosya denetçisindeki .xib dosyalarının özelliklerini ziyaret edin - seçim kutusundaki "Hedef Üyelik" özelliği, ardından xib dosyanız hedefinize bağlandı


2
Ek olarak, initWithNibName: bunle: yerine ayırma init kullanıyorsanız, alacağınız şey siyah bir ekrandır.
Robert Childan

Kesinlikle kullanılmayan bir .xib dosyasının neden bir proje dosyası klasöründe asılması gerektiğini merak ediyorum …
Ben

Sanırım otomatik düzen yerine yanlışlıkla bu onay kutusunun işaretini kaldırdım. Kilitlenme benim için düzeltildi, teşekkürler
Yunus Nedim Mehel

tüm hedef üyelik onay kutuları benim için gri renkte görünüyor ... bunun nedeni ne olabilir?
Stas

64

İçinde Targets -> Build Phases

.Xib'in eklendiğinden emin olun Copy Bundle Resources, yoksa .xib dosyasını ekleyin.


Benim için çalıştı. Bu genellikle bir xib dosyasını kopyaladığınızda / çoğalttığınızda olur. +1
VoidMain

22

hepsini bulmaya çalış

XXXController = [[XXXControlloer alloc] initWithNibName:@"XXXController" bundle:nil];

kodunuzda ve XXXControllerdoğru yazıldığından emin olun


Uç adı otomatik olarak yazılmadığından kolay
chings228

1
Tahsisatın hemen önündeki sınıf adını kastetti ve otomatik olarak yazılmıştı: P
Gil Sand

uiview uçtan yüklenebilir ancak initWithNibName:bundle:yöntemi yoktur
Vyachaslav Gerchicov

viewcontroller hakkında konuşuyoruz
chings228

@ chings228 XXXControlloer ve XXXController, farkı görün
Zaporozhchenko Oleksandr

15

Xcode'umu 3.2'den 4.02'ye yükselttikten sonra da aynı sorunu yaşadım ('Paket: ..'de NIB yüklenemedi'). Uygulamamı Xcode 3.2 ile dağıtmak iyi çalıştı, xcode 4 ile yukarıda belirtilen istisnayı yükselterek çöküyor - ancak yalnızca IOS Simulator'a (v.4.2) dağıtmaya çalıştığımda. IOS cihazını hedefleme (v.4.1), Xcode 4 ile de hareket etti.

(Saatlerce çaresizce etrafta dolaştıktan sonra) sebebin .xib dosyasında neredeyse "gizli" bir ayar olduğu ortaya çıktı:

Dosya denetçisinde .xib dosyalarının özelliklerini ziyaret edin: "Konum" özelliği, tüm .xib dosyaları için "Gruba Göre" olarak ayarlandı. Bunu 'Projeye göre' olarak değiştirdim ve işte: tüm .xib dosyaları artık IOS simülatörüne doğru şekilde yüklendi!

Bu garip Xcode4 davranışının arkasındaki nedenin ne olduğuna dair hiçbir fikrim yok ama belki bir girişimde bulunmaya değer mi?


Bu, çok eski bir Quartz Composer eklentisini derlerken karşılaştığım bir çökmeyi çözdü.
Peter Kazazes

12

Benim durumumda çok tuhaftı (bir film şeridi kullanın): Bazı nedenlerden dolayı, plistte "Ana film şeridi dosya temel adı" ndan "Ana uç dosyası temel adı" olarak değiştirildi.

"Ana film şeridi dosyası temel adına" (UIMainStoryboardFile) geri dönmek sorunu çözdü


1
İyi bir. Aynı sorunu yaşadım. Teşekkürler. Bu onu çözdü.
Rameez Hüseyin

1
Bu benim sorunumu çözdü! Teşekkür ederim. Projemi yeni kopyaladım ve ilgili tüm dosyaları yeniden adlandırdım. Bu hariç her şey çalıştı. Şimdi her şey çalışıyor !!
BeccaP

11

hata, adlı .xib dosyası olmadığı anlamına gelir "JRProvidersController". JRProvidersController.xibvar olup olmadığını yeniden kontrol edin .

.xib fileile yükleyeceksin

controller = [[JRProvidersController alloc] initWithNibName:@"JRProvidersController" bundle:nil];

1
Hey Hanuman, JRProvidersController.xib dosyasının var olup olmadığını kontrol ettim. Ayrıca dosyayı yeniden adlandırmayı ve çalıştırmayı denedim, o zaman bile aynı istisnayı atıyor.
Goje87

Çağrıyı initWithNibName: NSStringFromClass ([MyViewController sınıfı]) olarak değiştirmeyi deneyin. O harfe duyarlıdır olarak da dosya adı yakından kontrol
Hanuman


Sizin tarafınızdan önerilen değişiklikleri yaptım ama başarılı olamadım.
Goje87

7

Bir Objective-C görünüm denetleyicisinde özel bir Swift görünümü kullanarak (evet, <<PROJECT NAME>>-Swift.hdosyayı içe aktardıktan sonra bile ), ucu şu şekilde yüklemeyi denedim:

MyCustomView *customView = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([MyCustomView class]) owner:self options:nil] objectAtIndex:0];

... ancak NSStringFromClass([MyCustomView class])geri döner <<PROJECT NAME>>.MyCustomViewve yükleme başarısız olur. TL; DR Hepsi, bir dize hazır bilgisi kullanarak ucu yüklerken iyi çalıştı:

MyCustomView *customView = [[[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:self options:nil] objectAtIndex:0];

6

Derleme hedefi iOS cihazlarımdan biri olduğundan, Ürün dosyasına (xyzw.app) sağ tıkladım ve Finder'da Göster açılır öğesini seçtim. İçinde xyzw.app olan bir pencere açtı; Paketi Paket İçeriğini Göster'i kullanarak açtım ve şikayet ettiği dosya dışında beklediğim tüm dosyaları gördüm, adında küçük harf i yerine büyük harf I (zoomieView.nib yerine zoomieVIew.nib) ). Xib dosya adında büyük I harfini fark ettim ve değiştirip yeniden oluşturdum; Görünüşe göre Xcode üretilen .nib adını olduğu gibi bıraktı. Paketteki zoomieVIew.nib'i sildim, yeniden oluşturdum ve Xcode dosyayı gerektiği gibi zoomieView.nib olarak yeniden oluşturdu. Uygulama, cihaz üzerinde çalışmaya başladı.


Michael'ın tarif ettiği şeyin aynısı burada. özel bir UITableViewCell içeren bir xib dosyası oluşturmuştum. .app dosyasını açıp myCell.xib'i aradığımda, aslında myCell.nib olduğunu görüyorum. dahası, uygulama yalnızca cihazda kilitleniyordu ve xib dosyasını simülatörde çalıştırılırken sorunsuz bir şekilde yüklüyordu. sıfırlamak biraz zordu. en azından benim için. sadece dosyayı sildiğimde, hedefi temizlediğimde ve dosyayı geri kopyaladığımda - işe yaradı.
Nir Pengas

paket içeriğini bulmanın ve görüntülemenin kolay bir yolunu gösterdiğinden işaretlenmiştir
fotisgpap

doh. kendimi buna nasıl yeniden kaptırabilirim? teşekkürler nazik adam :) bu problemi araştırmanın
başındaydım

6

Bir storyboard ile bu sorunu yaşadım ve uca 'bKD-J3-fhr-view-ZSR-8m-2da' gibi bir isim verildi.

Bunun nedeni, bir görünüm denetleyicisinin init'inde (withCoder) self.view'a bir alt görünüm eklemeye çalışmamdı. Self.view henüz mevcut değil.

ViewDidLoad'a ve daha iyi hale getirildi!


Benzer şekilde, viewDidLoad () yerine init () 'de bir tablo görünümü temsilcisi ve veri kaynağı atamayı denediğimde (aptalca) böyle bir hata aldım
jpb

5

Projeye bak

Target -> Buid Phases -> Copy Bundle Resources

Xib / storyborad'ınızı kırmızı renkte bulacaksınız.

Sadece onu kaldırın.Ayrıca projeden eksik dosyanın tüm referanslarını kaldırın.

Şimdi bu film şeridini / xib dosyasını tekrar buna sürükleyin Copy Bundle Resources. Dosyayı hala kırmızı renkle gösterecek ancak bunun için endişelenmeyin.

Sadece temizleyin ve proje oluşturun.

Şimdi projenizi tekrar başarılı bir şekilde çalıştıracaksınız !!


1
"MyStoryboard.storyboard" ve "MyStoryboard ~ ipad.storyboad" olmak üzere iki storyboard aldığım için bu sorunumu çözdü ... bu yüzden iPad hedefinden "MyStoryboard.storyboard" u "Paket Kaynaklarını Kopyala" dan kaldırdım
i89

5

Storyboard için

Burada yayınlanan her bir çözümü denedim, ancak Storyboard'u Swift 5 ile kullandığım için hiçbir şey benim için işe yaramadı.

Storyboard test uygulamasında yeni denetleyiciler ve Görünümler oluşturmaya başladım, bulduğum şey My View Controller'ın Storyboard ID'sinin eksik olduğuydu.

İşte benim çözümüm, ViewController A'dan gitmek istiyorsanız -> Denetleyici B'yi Görüntüle

Adım 1. Film şeridinde: ViewControllerA'nızın Gezinme Denetleyicisi'ne gömülü olduğundan emin olun

Adım 2. Film şeridinde: Şimdi , Kodda Tanımlayıcı olarak kullanacağınız ViewControllerB'niz için Storyboard Kimliğinden bahsettiğinizi kontrol edin .

görüntü açıklamasını buraya girin

Adım 3. ve son olarak ViewControllerA cihazınızda Button tıklama ile denetleyiciye bu şekilde bastığınızdan emin olun.

if let viewControllerB = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewControllerB") as? ViewControllerB {

            if let navigator = navigationController {
                navigator.pushViewController(viewControllerB, animated: true)
            }
        }

4

XIB ADINI YERLEŞTİRDİĞİNİZDE .xib KOYMAYIN! ZATEN İMA EDİLMİŞTİR!

Bunu yapma:

 UIView *viewFromNib = [[NSBundle mainBundle] loadNibNamed:@"ResultsAssessmentView.xib" owner:self options:nil][0];

Bunu yap:

 UIView *viewFromNib = [[NSBundle mainBundle] loadNibNamed:@"ResultsAssessmentView" owner:self options:nil][0];

4

Swift4 örneği, MyCustomView.swift ve MyCustomView.xib'iniz bir çerçevede. Bunu MyCustomView'ın başlangıcına yerleştirin:

let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: "MyCustomView", bundle: bundle)
if let nibView = nib.instantiate(withOwner: self, options: nil).first as? UIView {
    self.aViewInMyCustomView = nibView
    self.aViewInMyCustomView.frame = self.frame
    self.addSubview(self.aViewInMyCustomView)
    // set constraints
    self.translatesAutoresizingMaskIntoConstraints = false
    NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .leading, relatedBy: .equal, toItem: self, attribute: .leading, multiplier: 1.0, constant: 0).isActive = true
    NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .trailing, relatedBy: .equal, toItem: self, attribute: .trailing, multiplier: 1.0, constant: 0).isActive = true
    NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .top, relatedBy: .equal, toItem: self, attribute: .top, multiplier: 1.0, constant: 0).isActive = true
    NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .bottom, relatedBy: .equal, toItem: self, attribute: .bottom, multiplier: 1.0, constant: 0).isActive = true
} 

En sonunda! İOS'un modüler projesinde çalışıyorum ve aradığım bu. Teşekkür ederim!
Firda şahidi

aViewInMyCustomView nedir?
famfamfam

@famfamfam: a UIView
norbDEV

tks, artık nasıl kullanılacağını biliyorum
famfamfam

3

Ayrıca, XIB'yi @ "MyFile.xib" gibi bir adla yüklemeye çalıştığımda da başarısız olduğunu gördüm. Sadece @ "MyFile" kullandığımda işe yaradı - görünüşe göre her zaman uzantıyı ekliyor. Ancak hata mesajı, MyFIle.xib'i pakette bulamadığını söyledi - eğer MyFile.xib.xib deseydi, bu büyük bir ipucu olurdu.


Uzantıyı eklememenizin nedeni, derlenmiş paketinizde .xib dosyalarının da .nib dosyalarına derlenmesidir. Yani paketinizde aslında bir MyFile.xib yoktu, çift uzantıyı boşverin.
Pieter Jongsma

2

Xcode 4.6.3 üzerinde çalışmak ve NIB dosyalarımı yerelleştirmek de bu sorunla karşılaşıyorum.

Benim için File Inspector'daki "Document Versioning" i 6.1 yerine Deployment 5.0 olarak değiştirmekten başka hiçbir şey yardımcı olmadı.


2

Uç dosyasını yeniden adlandırdığınızda olur. Zaten sahipseniz, yeni uç oluşturun (mevcut uç dosyası içeriğini yeni uca kopyalayın), eski uç dosyasını silin ve sorununuzu çözecektir.

Düzenleme: 4.6.3 sürümüne başlayan yeni Xcode ile, Controller sınıfını yeniden adlandırırsanız (refactor özelliği ile), uç dosyasını da yeniden adlandırır ve uç yükleme sorunu hakkında endişelenmenize gerek kalmaz.


2

Xcode 6.3'ü kullanarak ilginç bir deneyim yaşadım.

Yukarıda önerildiği gibi, normalde aklınıza gelen her şeyi yazım, hedef üyelik vb. İle denemenize rağmen bu hatayı da almaya devam ettim. Ayrıca, paketin doğru bir şekilde oluşturulmasını ancak boşuna olmasını sağlamak için uygulamayı simülatörden temizlemeyi, silmeyi ve uygulamayı birkaç kez silmeyi denedim.

Sonunda Brian Michael Bentley'in cevabını takiben, nihayet .app dosyamı HD'mdeki simülatörümün klasöründe incelemeye karar verdim. Beklenen abc.nib yerine abc ~ ipad.nib ile tüm uçlarımın orada olduğunu buldum. ~ İpad kısmını kaldırmak için tüm bu dosyaları manuel olarak yeniden adlandırdım, oluşturdum ve işe yaradı!

Bunların neden ~ ipad anahtar sözcüğüyle eklendiğini anlamaya çalışarak proje ayarlarıma baktım ve aslında Genel> Dağıtım Bilgileri sekmemde yalnızca iPad'i seçtim. Bir iPhone simülatöründe koşmaya çalışıyordum. Geçmişte Xcode'un ikili programın iPhone'u desteklemediğini ve uygulamayı çalıştırmayı başaramayacağınızı belirten bir hata vereceğine inanıyorum.

Uygulamayı simülatörden sildim ve aynı şeyi tekrar yaptım - yine sadece iPad destekli. Bu sefer .app, beklenen her film şeridi için abc ~ iphone.nib VE abc ~ ipad.nib içeriyordu ve iPhone simülatöründe gayet iyi çalışıyordu. Yine - Dağıtım Bilgisi ayarlarımızda yalnızca iPad'i seçersek, iPhone Simulator üzerinde çalışmamalı. Bu bir Xcode hatasıdır.

Bu yüzden, burada Xcode tarafında bazı tutarsız davranışlar var ve maalesef bu aralıklı bir hata ve bunu yeniden üretmek zor olabilir, ancak bunu buraya koyuyorum, böylece gelecekte başkalarına yardımcı olabilir.


2

Aynı sorun işe yaramadı, bu yüzden türetilmiş verilerle garip bir şey düşündüm.

Xcode 6.3.2'de şunları yapmam gerekiyordu:

XCode Menüsü -> Tercihler -> Konumlar Sekmesi -> Konumlarda Türetilmiş Verileri Göreceli olarak Değiştirin ve ardından Varsayılana geri dönün

Sonra uç iyi yüklendi.


Derived Data klasörünü yeni sildim ve işe yaradı. Proje navigasyonunda xib dosyasını yeniden adlandırdığım için kafam karıştı. Garip bir.
Kyle Goslan

2

XIB dosyanız muhtemelen proje klasörünüzün dışındadır. Bu, Hedef Denetçisinin görünmemesine yol açar. Ancak, XIB dosyasını proje klasörünüze taşımak onu düzeltmelidir.


2

Dikkatli olun: Xcode, dosya adlarında büyük / küçük harfe duyarlıdır. "Eğlence" ile "eğlence" aynı değil.


Ucumun dosya adı FormItemCheckBoxCell.nib, sınıf ise FormItemCheckboxCell idi. Adında "Box" ı büyük harfle yazmak hayatımın 45 dakikasına mal oldu.
SafeFastExpressive

1

Projenizde çerçeveler kullanıyorsanız, doğru paketten yüklediğinizden emin olmanız gerekir:

NSBundle *bundle = [NSBundle bundleWithIdentifier:@"<your bundle id here>"];
ABCViewController *vc = [[ABCViewController alloc] initWithNibName:@"<your nib name>" bundle:bundle];

1

benim için, sadece hücremdeki dosyanın adını sınıfıyla aynı olacak şekilde değiştirerek çözüldü.

Attributes Inspector'da (hikaye panosundaki sağ kenar çubuğundaki üçüncü sekme):

  1. Hücrenin Tanımlayıcısını ayarlayın (örneğin: "MyCellId"),
  2. Hücrenin Sınıfını ayarlayın (örneğin: dosya "MyCellClass" olduğunda "MyCellClass"),
  3. Hücreyi görünüm denetleyicinize aşağıdaki şekilde kaydedin:

    tableView.register (UINib (nibName: "MyCellClass", bundle: nil), forCellReuseIdentifier: "MyCellId")


0

Eski kodumu XCode 3x'ten XCode 4'e dönüştürürken bu sorunu yaşadım ve wwwwwwww.xib'i RootViewController.xib olarak yeniden adlandırarak çözdüm


0

Ben de aynı problemle karşılaştım. Benim durumumda uç adı "MyViewController.xib" idi ve ben onu "MyView.xib" olarak yeniden adlandırdım. Bu, hatayı ortadan kaldırdı.

Ayrıca bir projeyi XCode 3'ten 4.2'ye taşıyordum. Yol türünü değiştirmek önemli değildi.


0

Ayrıca bunun nedeni, yerelleştirmelerle uğraştığınızda dosyanın yanlış dile özgü klasörde aranması olabilir.


0

AppDelegate'imde bulunan bir görünüm denetleyicisinin adını her yeniden düzenlediğimde bunun için zaman harcıyorum. Yeniden düzenleme, initWithNibName: @ "MYOldViewControllerName" içindeki uç adını değiştirmez.


0

Aynı sorunu yaşadım, film şeridindeki görünüm denetleyici tanımlayıcımı yeniden adlandırmak benim için çalıştı.


0

Git'te şubeler arasında geçiş yaparsanız ve temizlemeyi unutursanız bunun olabileceğini fark ettim. Yani xib var ve her şey bulunuyor, ancak tam yapıda sorunlar olabilir. Yani her ihtimale karşı temizlemeyi unutma


0
SecondViewController *secondViewController = [[SecondViewController alloc]initWithNibName:@"SecondView.xib" bundle:nil];
    [self.navigationController pushViewController:secondViewController animated:YES];

Yukarıdaki kodda "SecondView.xib" gibi bir dosya uzantısı da verirseniz bu yanlıştır ve size yukarıdaki hatayı verecektir. Bunun yerine "SecondView" kullanın. Ben bu hatayı yaptım.


0

Bu benim için çalıştı .. Uç adını doğru yazdığınızdan emin olun.

[[NSBundle mainBundle] loadNibNamed: @ "Graphview" sahibi: kendi seçenekleri: nil];

Graphview (uç adı)

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.