Tidak dapat memuat NIB dalam paket

111

Saya mencoba mengintegrasikan Janrain Engage sebagai modul kustom dengan Appcelerator Titanium. Saya telah membuat modul sampel dan menyeret folder JREngage ke modul sampel xcodeproj seperti yang ditunjukkan dalam dokumentasi Jainrain.

Sekarang saya memberikan perintah build untuk proyek ini, lalu jalankan ./build.pydan akhirnya saya jalankan titanium runperintahnya. Ini meluncurkan aplikasi dalam simulator dengan layar kosong dan segera crash dan melemparkan kesalahan berikut.

Menghentikan aplikasi karena pengecualian yang tidak tertangkap 'NSInternalInconsistencyException', alasan: 'Tidak dapat memuat NIB dalam paket:' NSBundle </ Users / abhilash / Library / Application Support / iPhone Simulator / 4.2 / Applications / CA167346-4091-4E16-B841-955D1D391713 / test.app> (dimuat) 'dengan nama' JRProvidersController ''

Mengapa kesalahan ini bisa terjadi?

Goje87
sumber

Jawaban:

213

Kunjungi properti file .xib di inspektur file, properti pitch "Keanggotaan Target" di kotak pilih, kemudian file xib Anda ditautkan dengan target Anda

tujuh pound
sumber
2
Selain itu, jika Anda menggunakan alokasi init, alih-alih initWithNibName: bunle :, yang akan Anda dapatkan adalah layar hitam.
Robert Childan
Bertanya-tanya mengapa file .xib yang sama sekali tidak terpakai harus digantung di folder file proyek…
Ben
Saya rasa saya tidak sengaja menghapus centang pada kotak centang ini, bukan autolayout. Memperbaiki kecelakaan untuk saya, terima kasih
Yunus Nedim Mehel
semua kotak centang keanggotaan target berwarna abu-abu untuk saya ... apa alasannya?
Stas
64

Di Targets -> Build Phases

Pastikan .xib ditambahkan ke Copy Bundle Resources, jika tidak ada maka tambahkan file .xib.

kunalg
sumber
Bekerja untuk saya. Ini biasanya terjadi ketika Anda menyalin / menduplikasi file xib. +1
VoidMain
22

coba cari tahu semuanya

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

dalam kode Anda, dan pastikan XXXControllerejaannya benar

chings228
sumber
mudah, karena nibname tidak diketik secara otomatis
chings228
1
Yang dia maksud adalah nama kelas tepat sebelum alokasi, yang diketik otomatis: P
Gil Sand
UIview dapat dimuat dari nib tetapi tidak memiliki initWithNibName:bundle:metode
Vyachaslav Gerchicov
kita berbicara tentang viewcontroller
chings228
@ chings228 XXXControlloer dan XXXController, lihat perbedaannya
Zaporozhchenko Oleksandr
15

Saya mengalami masalah yang sama (pengecualian 'Tidak dapat memuat NIB dalam bundel: ..') setelah memutakhirkan xcode saya dari 3.2 menjadi 4.02. Sementara penerapan aplikasi saya dengan Xcode 3.2 bekerja dengan baik, itu macet dengan xcode 4 meningkatkan pengecualian yang disebutkan di atas - tetapi hanya ketika saya mencoba menerapkan ke Simulator IOS (v.4.2). Menargetkan perangkat IOS (v.4.1) bertindak juga dengan Xcode 4.

Ternyata (setelah berjam-jam sibuk mencari-cari) bahwa alasannya adalah pengaturan yang hampir "tersembunyi" di file .xib:

Kunjungi properti file .xib di pemeriksa file: Properti 'Lokasi' disetel ke 'Relatif ke Grup' untuk semua file .xib. Saya mengubahnya menjadi 'Relatif dengan proyek' dan voila: semua file .xib sekarang dimuat dengan benar di simulator IOS!

Saya tidak tahu apa alasan di balik itu untuk perilaku Xcode4 yang aneh ini, tetapi mungkin layak untuk dicoba?

creator_11
sumber
Ini memecahkan masalah yang saya hadapi saat menyusun plugin Quartz Composer yang sangat usang.
Peter Kazazes
12

Dalam kasus saya itu sangat aneh (gunakan storyboard): Untuk beberapa alasan itu berubah dari "Nama dasar file storyboard utama" menjadi "Nama dasar file nib utama" di plist.

Mengubah kembali ke "Nama basis file storyboard utama" (UIMainStoryboardFile) menyelesaikan masalah

Tibidabo
sumber
1
Bagus. Punya masalah yang sama. Terima kasih. Ini menyelesaikannya.
Rameez Hussain
1
Ini memecahkan masalah saya! Terima kasih. Saya baru saja menggandakan proyek saya dan mengganti nama semua file terkait. Semuanya bekerja kecuali ini. Sekarang semuanya bekerja !!
BeccaP
11

kesalahan berarti tidak ada file .xib dengan "JRProvidersController"nama. periksa kembali apakahJRProvidersController.xib ada.

Anda akan memuat .xib filedengan

controller = [[JRProvidersController alloc] initWithNibName:@"JRProvidersController" bundle:nil];
Hanuman
sumber
1
Hai Hanuman, saya telah memeriksa bahwa file JRProvidersController.xib ada. Saya juga mencoba untuk mengganti nama file dan mengeksekusi, bahkan kemudian memberikan pengecualian yang sama.
Goje87
coba ubah pemanggilan ke initWithNibName: NSStringFromClass ([kelas MyViewController]). Juga periksa dengan seksama untuk nama file karena peka huruf besar / kecil
Hanuman
Saya telah membuat perubahan yang disarankan oleh Anda, tetapi tidak berhasil.
Goje87
7

Menggunakan tampilan Swift khusus dalam pengontrol tampilan Objective-C (ya, bahkan setelah mengimpor <<PROJECT NAME>>-Swift.hfile), saya mencoba memuat pena menggunakan:

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

... tapi NSStringFromClass([MyCustomView class])kembali <<PROJECT NAME>>.MyCustomViewdan beban gagal. TL; DR Semua bekerja dengan baik saat memuat ujung menggunakan string literal:

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

Dengan target build menjadi salah satu perangkat iOS saya, saya mengklik kanan file Produk (xyzw.app) dan memilih item popup Show in Finder. Itu membuka jendela dengan xyzw.app di dalamnya; Saya membuka bundel menggunakan Show Package Contents dan melihat semua file yang saya harapkan, kecuali satu file, yang dikeluhkannya, dengan huruf kapital I dan bukan huruf kecil i dalam nama (zoomieVIew.nib bukan zoomieView.nib ). Saya telah memperhatikan huruf besar I pada nama file xib, dan mengubahnya dan membangunnya kembali; tampaknya Xcode meninggalkan nama .nib yang dihasilkan seperti semula. Saya menghapus zoomieVIew.nib dalam bundel, membangun kembali, dan Xcode benar-benar membuat ulang file sebagai zoomieView.nib. Aplikasi mulai berfungsi di perangkat.

Michael Brian Bentley
sumber
hal yang sama di sini seperti yang dijelaskan oleh michael. saya telah membuat file xib yang memegang UITableViewCell kustom. ketika saya membuka .app dan mencari myCell.xib, saya melihat itu sebenarnya myCell.nib. lebih jauh lagi, aplikasi hanya mogok di perangkat dan memuat file xib dengan baik saat dijalankan di simulator. agak sulit untuk mengatur ulang. bagi saya setidaknya. hanya ketika saya menghapus file, membersihkan target dan menyalin file kembali - apakah berhasil.
Nir Pengas
ditandai karena ini juga menunjukkan cara mudah untuk menemukan dan melihat isi paket
fotisgpap
doh. bagaimana saya bisa melakukan ini lagi. terima kasih pria yang baik :) saya berada di awal penelitian masalah ini
heksimal
6

Saya mengalami masalah ini dengan storyboard dan ujungnya bernama 'bKD-J3-fhr-view-ZSR-8m-2da'.

Itu karena saya mencoba menambahkan subview ke self.view di init view controller (withCoder). Self.view belum ada.

Pindah ke viewDidLoad dan semuanya lebih baik!

Will Larche
sumber
Demikian pula, saya mendapat kesalahan seperti ini ketika saya (dengan bodoh) mencoba untuk menetapkan delegasi tampilan tabel dan sumber data di init () daripada viewDidLoad ()
jpb
5

Lihat proyek

Target -> Buid Phases -> Copy Bundle Resources

Anda akan menemukan xib / storyborad Anda dengan warna merah.

Hapus saja. Hapus juga semua referensi file yang hilang dari proyek.

Sekarang seret file storyboard / xib ini lagi ke ini Copy Bundle Resources . Ini masih akan menampilkan file dengan warna merah tetapi jangan khawatir tentang itu.

Bersihkan dan bangun proyek.

Sekarang proyek Anda akan berjalan kembali dengan sukses !!

iChirag
sumber
1
Ini memecahkan masalah saya, karena saya mendapat dua storyboard "MyStoryboard.storyboard" dan "MyStoryboard ~ ipad.storyboad" ... jadi dari target iPad saya menghapus "MyStoryboard.storyboard" dari "Salin Sumber Daya Bundel"
i89
5

Untuk Papan Cerita

Saya mencoba setiap solusi yang diposting di sini tetapi tidak ada yang berhasil untuk saya karena saya menggunakan Storyboard dengan Swift 5.

Baru saja mulai membuat pengontrol dan Tampilan baru di aplikasi uji storyboard, yang saya temukan adalah saya kehilangan ID Storyboard Pengontrol Tampilan Saya.

Jadi inilah solusi saya, Jika Anda ingin Pergi dari ViewController A -> View Controller B

Langkah 1. Di storyboard: Pastikan ViewControllerA Anda tertanam di Pengontrol Navigasi

Langkah 2. Di storyboard: Sekarang periksa apakah Anda menyebutkan ID Storyboard untuk ViewControllerB yang akan Anda gunakan dalam kode sebagai Identifier.

masukkan deskripsi gambar di sini

Langkah 3. dan terakhir pastikan Anda mendorong pengontrol dengan cara ini di ViewControllerA Anda dengan klik Tombol.

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

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

JANGAN PUT .xib SAAT ANDA MEMASUKKAN NAMA XIB! ITU SUDAH TERSIRAT!

Jangan lakukan ini:

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

Melakukan hal ini:

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

Contoh Swift4 jika MyCustomView.swift dan MyCustomView.xib Anda dalam kerangka. Tempatkan ini di init MyCustomView :

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
} 
norbDEV
sumber
Akhirnya! Saya bekerja di proyek modular iOS dan inilah yang saya cari. Terima kasih!
Firda Sahidi
apa itu aViewInMyCustomView?
famfamfam
@famfamfam: a UIView
norbDEV
tks, sekarang saya tahu cara menggunakan
famfamfam
3

Saya juga menemukan bahwa itu gagal ketika saya mencoba memuat XIB dengan nama seperti @ "MyFile.xib". Ketika saya baru saja menggunakan @ "MyFile" itu berhasil - tampaknya itu selalu menambahkan ekstensi. Tetapi pesan kesalahan hanya mengatakan tidak dapat menemukan MyFIle.xib dalam bundel - jika dikatakan MyFile.xib.xib, itu akan menjadi petunjuk besar.

Jonathan Starr
sumber
Alasan Anda tidak boleh menambahkan ekstensi adalah karena dalam bundel terkompilasi Anda, file .xib juga dikompilasi menjadi file .nib. Jadi sebenarnya tidak ada MyFile.xib di bundel Anda, apalagi ekstensi ganda.
Pieter Jongsma
2

Bekerja pada Xcode 4.6.3 dan melokalkan file NIB saya, saya juga mengalami masalah ini.

Bagi saya tidak ada yang membantu selain mengubah "Document Versioning" di File Inspector menjadi Deployment 5.0, bukan 6.1.

krafter
sumber
2

Itu terjadi ketika Anda mengganti nama file nib. Jika Anda sudah, buat nib baru (artinya salin isi file nib saat ini ke nib baru), hapus file nib lama dan itu akan menyelesaikan masalah Anda.

Sunting: Dengan Xcode baru mulai versi 4.6.3, Jika Anda mengganti nama (dengan fitur refactor) kelas Controller, itu akan mengganti nama file nib juga dan Anda tidak perlu khawatir tentang masalah pemuatan nib.

NetDeveloper
sumber
2

Saya baru saja mendapat pengalaman menarik menggunakan Xcode 6.3.

Saya terus mendapatkan kesalahan ini juga, meskipun mencoba semua yang biasanya Anda pikirkan dengan ejaan, keanggotaan target, dll. Seperti yang disarankan di atas. Saya juga mencoba membersihkan, menghapus data yang diturunkan, dan juga menghapus aplikasi dari simulator beberapa kali untuk memastikan bundel dibuat dengan benar tetapi tidak berhasil.

Akhirnya, mengikuti jawaban Brian Michael Bentley, saya akhirnya memutuskan untuk memeriksa file .app saya di folder simulator saya di HD saya. Saya menemukan bahwa semua ujung pena saya ada di sana tetapi dengan abc ~ ipad.nib alih-alih abc.nib yang diharapkan. Saya secara manual mengganti nama semua file ini untuk menghapus bagian ~ ipad, dibangun dan berhasil!

Mencoba untuk melihat mengapa ini telah ditambahkan dengan kata kunci ~ ipad, saya melihat pengaturan proyek saya dan sebenarnya, di tab General> Deployment Info saya, saya hanya memilih iPad. Saya mencoba menjalankan simulator iPhone. Saya percaya bahwa di masa lalu, Xcode akan memberikan kesalahan yang menunjukkan bahwa biner tidak mendukung iPhone dan Anda tidak akan berhasil menjalankan aplikasinya.

Saya menghapus aplikasi dari simulator dan melakukan hal yang sama lagi - lagi hanya dengan iPad yang didukung. Kali ini, .app berisi abc ~ iphone.nib DAN abc ~ ipad.nib untuk setiap storyboard yang diharapkan dan berjalan dengan baik di simulator iPhone. Sekali lagi - Jika kami memilih iPad hanya di pengaturan Deployment Info kami, itu seharusnya tidak berjalan di iPhone Simulator. Ini adalah bug Xcode.

Jadi, ada beberapa perilaku yang tidak konsisten di sini dari pihak Xcode dan sayangnya ini adalah bug yang terputus-putus dan ini mungkin sulit untuk direproduksi, tapi saya taruh ini di sini agar dapat membantu orang lain di masa mendatang.

Justin-Nicholas Y. Toyama
sumber
2

Jika masalah yang sama ini tidak berhasil, jadi saya menemukan sesuatu yang aneh dengan data turunan.

Di xcode 6.3.2 saya harus:

Di Menu XCode -> Preferensi -> Tab Lokasi -> Di Lokasi Ubah Data Berasal ke Relatif dan kemudian beralih kembali ke Default

Kemudian ujung pena terisi dengan baik.

Kevin
sumber
Saya baru saja menghapus folder Derived Data dan berhasil. Sepertinya menjadi bingung karena saya telah mengganti nama file xib di navigasi proyek. Aneh.
Kyle Goslan
2

File XIB Anda mungkin berada di luar folder proyek Anda. Ini menyebabkan tidak muncul Inspektur Target. Namun, memindahkan file XIB ke folder proyek Anda harus memperbaikinya.

hhamm
sumber
2

Hati-hati: Xcode peka huruf besar kecil dengan nama file. Ini tidak sama "Menyenangkan" dengan "kesenangan".

oskarko
sumber
Nama file untuk ujung pena saya adalah FormItemCheckBoxCell.nib, kelasnya adalah FormItemCheckboxCell. Memanfaatkan "Kotak" pada nama itu menghabiskan waktu 45 menit dalam hidup saya.
SafeFastExpressive
1

Jika Anda menggunakan kerangka kerja dalam proyek Anda, Anda perlu memastikan bahwa Anda memuat dari bundel yang benar:

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

bagi saya, itu diselesaikan hanya dengan mengubah nama file sel saya menjadi sama dengan kelasnya.

Di Attributes Inspector (Tab ketiga di bilah sisi kanan di papan cerita):

  1. Setel Pengenal sel (misalnya: "MyCellId"),
  2. Atur Kelas sel (misalnya: "MyCellClass" jika file adalah "MyCellClass"),
  3. Daftarkan sel di pengontrol tampilan Anda sebagai berikut:

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

Marjan Basiri
sumber
0

Punya masalah ini saat mengubah kode lama saya dari XCode 3x ke XCode 4 dan Mengatasinya dengan hanya mengganti nama wwwwwwww.xib menjadi RootViewController.xib

Nikolay Frick
sumber
0

Saya mengalami masalah yang sama. Dalam kasus saya, nama ujung pena adalah "MyViewController.xib" dan saya mengganti namanya menjadi "MyView.xib". Ini menghilangkan kesalahan.

Saya juga memindahkan proyek dari XCode 3 ke 4.2. Mengubah jenis Path tidak masalah.

kepala kapal
sumber
0

Juga alasannya bisa jadi file tersebut dicari di folder khusus bahasa yang salah saat Anda mengacaukan pelokalan.

MacMark
sumber
0

Setiap kali saya refactor nama pengontrol tampilan yang ada di appDelegate saya, saya membuang waktu untuk ini. Refactoring tidak mengubah nama nib di initWithNibName: @ "MYOldViewControllerName".

cloudsurfin.dll
sumber
0

Saya memiliki masalah yang sama, mengganti nama pengenal pengontrol tampilan di storyboard berhasil untuk saya.

Dave
sumber
0

Saya perhatikan bahwa itu mungkin terjadi jika Anda beralih antar cabang di git dan lupa untuk melakukan pembersihan. Jadi xib ada di sana dan semuanya ditemukan, tetapi versi pastinya mungkin bermasalah. Jadi untuk berjaga-jaga jangan lupa bersihkan

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

Pada kode di atas, jika Anda juga memberikan ekstensi file seperti "SecondView.xib", maka itu salah dan akan memberi Anda kesalahan di atas. Gunakan "SecondView" sebagai gantinya. Saya telah membuat kesalahan itu.

NSPratik
sumber
0

Ini berhasil untuk saya .. Pastikan Anda mengetik nama ujung pena dengan benar.

[[NSBundle mainBundle] loadNibNamed: @ "Graphview" pemilik: opsi mandiri: nil];

Graphview (nama ujung pena)

Narasimha Nallamsetty
sumber