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



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


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)


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


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.


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


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.


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).


5

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

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


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


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).


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.


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">

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 ....


0

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


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


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.


0

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

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


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.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.