Storyboard tidak mengandung pengontrol tampilan dengan pengidentifikasi

175

Saya terus mendapatkan kesalahan berikut:

Storyboard (<UIStoryboard: 0x7ebdd20>) doesn't contain a view controller with identifier 'drivingDetails'

Ini kodenya:

- (void)tableView:(UITableView *)tableView 
        didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

   UIViewController *controller =  [self.storyboard instantiateViewControllerWithIdentifier:@"drivingDetails"];
   controller.title = [[dao libraryItemAtIndex:indexPath.row] valueForKey:@"name"];
   [self.navigationController pushViewController:controller animated:YES];
}

Saya sudah mengatur identifierpada UIStoryboardtapi saya masih mendapatkan kesalahan ini.

masukkan deskripsi gambar di sini


Tikar
sumber
4
Sepertinya Anda menetapkan pengidentifikasi segue, bukan pengontrol tampilan. Pengontrol tampilan mana dalam gambar yang ingin Anda tampilkan? Dan mengapa Anda tidak menggunakan segue saja?
Firoze Lafeer
Pengontrol tampilan Mengemudi berfungsi dengan baik .... daripada saat saya mencoba menyajikan TableViewController, saya mendapatkan kesalahan ...... bagaimana Anda melakukannya?
Mat
Buka Storyboard, hapus ID Storyboard itu, dan tambahkan lagi. Anda kadang-kadang perlu membersihkan folder bangun dan data yang diturunkan
onmyway133

Jawaban:

244

Hanya untuk referensi di masa mendatang:

Saya sedang mengembangkan di iOS 6 menggunakan Storyboards.

Saya mengalami masalah yang sama, tetapi saya tidak dapat menemukan bidang "Identifier" di inspektur. Alih-alih, cukup setel bidang bernama "Storyboard ID" ke nama yang Anda beri nama Pengenal. Bidang ini dapat ditemukan di bawah tab "Tampilkan inspektur Identitas" di inspektur.

[Catatan - komentar di bawah ini menunjukkan bahwa beberapa orang telah menemukan bahwa mereka perlu (juga?) Mengatur bidang "ID Pemulihan" tepat di bawah ID Storyboard di inspektur. Mengklik "Gunakan Storyboard ID" sepertinya tidak cukup.]

Ada gambar di bawah ini untuk referensi: (dalam hal ini saya telah memberi nama pengidentifikasi saya sama dengan kelas saya) masukkan deskripsi gambar di sini

khaliq
sumber
24
pre XCode 4.4 dan sebelumnya: Identifier; XCode 4.5: Storyboard ID
ilmiacs
Terima kasih atas informasi Anda. Saya kesulitan menemukan pengenal di storyboard mengikuti penjelasan di google, tetapi saya tidak dapat menemukan Pengidentifikasi di Xcode4.6. ini masalah besar bagi pemula. Terima kasih.
pemula
4
Apa yang berhasil bagi saya adalah menggunakan ReuseIndentifier. ID Storyboard masih menyebabkan pengecualian pointer nol.
Droid Chris
Kasus yang sama di sini @DroidChris
Ahmed
5
periksa "Gunakan Storyboard ID" membuat saya bahagia
preetam
189

Dalam Xcode 7 - 11 ,

ketika Anda mengubah ID storyboard dan Anda mendapatkan kesalahan seperti ini,

cukup BERSIHKAN proyek Anda ( CMD+ SHIFT+ K)

Ted
sumber
13
Mengapa saya selalu lupa melakukan ini? Ini memperbaiki masalah paling gila. Terima kasih, Ted, untuk mengingatkanku!
AlphaCodaSeven
2
Masalah ini terjadi di XCode 7.2 ketika menarik dari repo di mana VC di storyboard telah diberi pengidentifikasi. Membersihkan proyek itu sepertinya menyelesaikan masalah.
Ed George
2
Saya pikir saya kehilangan akal ... segue sederhana tidak berfungsi, ini berhasil.
dokun1
2
Ya Ini berfungsi !!!! beberapa waktu Membersihkan proyek xcode akan menghapus referensi yang tidak diinginkan ke proyek
kiran
3
Saya berasal dari Android Studio dan pengembangan Android. Ini gila berapa banyak peretasan yang harus saya gunakan dalam XCode dan Swift. Saya benar-benar harus menangis. Serius.
ktamas
43

Tetap! Tidak hanya pengidentifikasi di segue harus ditetapkan, dalam kasus saya DrivingDetails, tetapi juga pengidentifikasi di tableViewController saya harus ditetapkan sebagai DrivingDetails ... periksa gambar saya:

masukkan deskripsi gambar di sini

Saya juga menghapus pengontrol tampilan navigasi jadi sekarang pengontrol tampilan 2 tabel terhubung langsung dengan animasi "push".

***** EDIT untuk XCODE 7.0 *****

Anda harus mengatur storyboardId (dalam hal ini viewController tertanam di pengontrol Navigasi:

let lastMinVc  = mainStoryBoard.instantiateViewControllerWithIdentifier("lastMinuteNavController") as! UINavigationController

masukkan deskripsi gambar di sini

Tikar
sumber
2
Saya mengalami masalah yang serupa dengan pertanyaan ini, tetapi ketika saya pergi ke inspektur atribut saya tidak melihat 2 bidang seperti di layar Anda hanya mengambil bidang Judul, tanpa bidang pengidentifikasi
Anon957
sudahkah Anda melihat jawaban di atas? Saya pikir lebih diperbarui. Terima kasih
Mat
1
Identifier untuk segue tidak ada hubungannya dengan ini. Hanya ID Storyboard untuk pengontrol tampilan yang perlu ditetapkan di storyboard.
Jawwad
Mungkin terkait. Di iOS7 [storyboard instantiateViewControllerWithIdentifier]BUKAN instantiating tampilan dari Interface Builder di dalam view controller; tetapi di iOS6 memang
William Entriken
30
let storyboard = UIStoryboard(name: "StoryboardFileName", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "StoryboardID")
self.present(controller, animated: true, completion: nil)

catatan:

  • "StoryboardFileName"adalah nama file Storyboard dan bukan ID dari storyboard!
  • "StoryboardID"adalah ID yang Anda tetapkan secara manual di inspektur identitas untuk storyboard itu (lihat tangkapan layar di bawah).

ID Storyboard

Terkadang orang percaya bahwa yang pertama adalah Storyboard ID dan yang kedua adalah nama kelas View Controller, jadi perhatikan perbedaannya.

Rafael
sumber
1
Ini!! Saudaraku, kau baru saja memecahkan misteri 18 jamku. Terima kasih atas penjelasan singkatnya.
mrfevrier
1
Yesus Kristus! Terima kasih untuk ini! .instantiateViewController(withIdentifier: "StoryboardID")harus diubah namanya menjadi .instantiateStoryboard(withIdentifier: "StoryboardID")Atau hanya sesuatu yang lebih sederhanaUIStoryboard(name: "StoryboardFileName", bundle: nil).init()
roosevelt
16

Identitas terletak di tab Identity Inspektur bernama Storyboard ID untuk Xcode 6.3.2 dan dicentang opsi Use Storyboard ID. masukkan deskripsi gambar di sini

BeyazBaron
sumber
Ini adalah masalah selama ini, ini bekerja di kedua tempat saya mengalami masalah. Bukan hanya nilai ID Storyboard yang ditetapkan, Anda perlu memeriksa 'Gunakan ID Storyboard'
Tyler Hack
"Gunakan Storyboard ID" adalah bagian penting yang hilang untuk saya. Terima kasih.
Marcy
9

Baru saja mengalami masalah ini setelah menambahkan VC baru ke storyboard tetapi hanya pada perangkat, bukan pada simulator. Ternyata itu karena memiliki beberapa pelokalan storyboard - VC hanya ditambahkan ke yang utama. Saya mencoba menghapus pelokalan lain (salah satunya adalah yang iPhone saya gunakan) tetapi masih ada kesalahan. Pada akhirnya saya harus membuat ulang lokasi lain dengan VC baru di masing-masing.

Hari Karam Singh
sumber
5

Kompiler menunjukkan kesalahan berikut:

Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: 'Storyboard (<UIStoryboard: 0x7fedf2d5c9a0>) doesn't contain a 
ViewController with identifier 'SBAddEmployeeVC''

Di sini objek storyboard yang dibuat bukan storyboard utama yang berisi ViewControllers kami. Sebagai file storyboard tempat kami bekerja dinamai Main.storyboard . Jadi kita perlu memiliki referensi objek dari Main.storyboard .

Gunakan kode berikut untuk itu:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];

Berikut storyboardWithNameadalah nama file storyboard yang sedang kami kerjakan dan bundlemenentukan bundel di mana storyboard kami berada (yaitu mainBundle).

Ravi Bhanushali
sumber
5

Bagi mereka yang memiliki masalah yang sama dengan @Ravi Bhanushali, berikut adalah solusi Swift 4:

let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)

confitz20
sumber
Ini harus ditambahkan komentar pada jawaban @Ravi.
Sunil
Saya akan tetapi tidak memiliki reputasi. Seseorang dengan reputasi cukup dipersilahkan untuk melakukannya
confitz20
4

Saya menemukannya ... klik pada controller tampilan di storyboard, klik ikon ketiga dari kiri pada inspektur atribut vc - yang mana Anda mengatur nama panggilan pada layar yang tertulis 'identitas' - tambang disembunyikan, saya harus klik pada kata identitas lalu tampilkan storyboardID - tambahkan pengenal dari kode, selesai

Jon
sumber
4

Memodifikasi "Storyboard ID" di inspektur identitas (ikon ke-3 di sebelah kiri) akan berfungsi.

Jika tidak dan Anda yakin tidak ada kesalahan ketik, coba bersihkan proyek ("Produk" -> "Bersihkan", atau cukup perintah + shift + K).

aychen0110
sumber
menyelamatkan hidupku. Terima kasih. (terutama bagian tentang pembersihan)
Jay
1

Saat memasuki pengidentifikasi Anda belum memilih pengontrol tampilan yang tepat, cukup periksa sekali jika dilakukan, ulangi prosedur sekali lagi.

iamsult
sumber
controller tampilan mana yang harus saya pilih? maaf saya bingung
Mat
TableViewController * controller = [self.storyboard instantiateViewControllerWithIdentifier: @ "drivingDetails"]; controller.title = [[dao libraryItemAtIndex: indexPath.row] valueForKey: @ "name"]; [self.navigationController pushViewController: controller animated: YES]; seperti ini?
Mat
Sesuai gambar TableViewController harus dipilih seperti yang Anda lakukan untuk menampilkan detail di controller itu.
iamsult
Penjelasan langkah demi langkah dari papan cerita yang diberikan raywenderlich.com/5138/beginning-storyboards-in-ios-5-part-1
iamsult
1
Hanya sedikit catatan pengidentifikasi segue dan pengontrol tampilan Anda berbeda. Saya hanya ingin menyoroti kalau-kalau ada beberapa kebingungan karena Anda menggunakan nama yang sama untuk keduanya. Pengidentifikasi segue Anda harus untuk digunakan dalam prepForSegue dan pengidentifikasi pengontrol tampilan Anda untuk memuat tampilan dari storyboard Anda secara langsung. scott-sherwood.com/?p=219
Scott Sherwood
1

Beberapa pengontrol tampilan saya kehilangan atribut storyboardIdentifier .

Sebelum:

<viewController
    id="pka-il-u5E"
    customClass="YourViewControllerName"
    customModule="ModuleName"
    customModuleProvider="target"
    sceneMemberID="viewController">

Setelah:

<viewController
    storyboardIdentifier="YourViewControllerName"   <----
    id="pka-il-u5E"
    customClass="YourViewControllerName"
    customModule="ModuleName"
    customModuleProvider="target"
    sceneMemberID="viewController">
Andy
sumber
0

Saya mendapat kesalahan yang sama dan saya bisa memperbaikinya dengan mengubah perubahan berikut dalam proyek saya. Saya telah menyebutkan nama kelas saya di panel inspektur kemudian masalahnya terpecahkan. Goto-> panel kanan ada Identity Inspector Di bagian kelas kustom

class: nama kelas Anda (ViewController)

Di ID storyboard bagian Identitas: storyboard ID Anda (Nama viewController)

Setelah klik ini pada opsi Gunakan storyboard ID di sana. Itulah masalahnya selesai. Saya harap ini akan membantu Anda ....

Narasimha Nallamsetty
sumber
0

Gunakan pengenal Anda (@ "drivingDetails") sebagai Storyboard ID.

Priyam
sumber
0

sangat sederhana pilih controller tampilan masing-masing di papan cerita utama dan periksa storyboardID jika ada menggunakannya dalam pengidentifikasi memberikan nama dan menggunakannya.

di sini firstone saya adalah storyboardID biarkan vc = self.storyboard? .instantiateViewController (withIdentifier: "firstone") as! tabBarViewController

Saba Zehra
sumber
0

Saya mencoba semua solusi di atas dan tidak ada yang berhasil.

Apa yang saya lakukan adalah:

  • Proyek bersih
  • Hapus data yang diturunkan
  • Mulai ulang Xcode
  • Masukkan kembali StoryboardID yang ditunjukkan dalam jawaban sebelumnya (di dalam IB).

Dan kemudian berhasil. Hal yang mengejutkan adalah bahwa saya telah memasukkan ID Storyboar di pembangun antarmuka dan itu dihapus / dihapus setelah membuka Xcode lagi.

Semoga ini bisa membantu seseorang.

Darkwonder
sumber
0

Membersihkan semua hal dan menutup Xcode tidak memecahkan masalah bagi saya.

Saya harus menghapus viewController dan membuat yang baru dengan pengenal baru.

pengguna3722523
sumber
0

Catatan: Jika Anda menggunakan cocoapods dalam proyek Anda, jalankan dulu pod deintegratedanrm Podfile.lock

Kemudian buka folder proyek Anda di editor kode pihak ketiga seperti VSCode dan lakukan pencarian global untuk nama ViewController yang melemparkan kesalahan.

  1. Ganti nama / perbaiki nama yang salah yang Anda temukan.
  2. Simpan semua perubahan.
  3. Bersihkan dan bangun proyek Anda.

Semuanya harus berfungsi dengan baik sekarang.

Ini paling sering disebabkan ketika Anda mengganti nama file dari dalam Xcode.

Arjun Shukla
sumber
-1

XCODE DRAG N PANEL DROP TELAH !!!

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

Tuan Heelis
sumber