Meskipun utas ini sudah lama, saya tidak melihat jawaban yang menjelaskan apa yang berhasil untuk saya, jadi begini ...
Saya mengalami kesalahan ini dan pemeriksaan visual storyboard menunjukkan bahwa semua pengontrol tampilan tampaknya terhubung ke pengontrol tampilan root.
Saya mencoba memberi nama semua 17 pengontrol tampilan di storyboard (seperti dalam jawaban @ bobnoble). Saya menggunakan konvensi penamaan berdasarkan nama panjang pengontrol tampilan, misalnya "jvc" untuk "Jobs View Controller". Ketika saya mencoba membangun, saya mendapat pesan kesalahan yang menunjuk ke salah satu pengontrol tampilan sebagai memiliki nama duplikat. Melacak semuanya, saya menemukan bahwa saya memiliki duplikat sebenarnya dari pengontrol tampilan yang ditumpuk persis di atas kembarannya. Saya menduga itu adalah kerusakan potong-dan-tempel dari eksperimen antarmuka pengguna yang tidak saya batalkan sepenuhnya.
Bagaimanapun, menghapus kembaran yang tidak terhubung menyelesaikan masalah saya. Setelah itu, saya menghapus semua nama VC karena tidak direferensikan dalam kode.
Storyboard ID
Di storyboard Anda, pilih setiap pengontrol tampilan (panah merah pada gambar di bawah) dan lihat bidang ID Storyboard (oval merah). Tidak satu pun bidang ID Papan Cerita harus kosong. Jika Anda menemukan salah satunya, itulah pelakunya.
sumber
Storyboard ID
menghapus peringatanUINavigationController
beberapaUIViewControllers
dan harus mengatur pengenal untuk semuanya, bahkan saya tidak pernah memanggil salah satunya dengan pengenal. Benar-benar menjengkelkan, mencari bug di mana tidak ada orang!Saya baru saja mendapatkan kesalahan yang sama persis dengan Storyboard satu adegan sederhana, dan yang harus saya lakukan untuk memperbaikinya hanyalah mencentang kotak centang "Is Initial View Controller" untuk 1 view controller di Storyboard. Saya menduga Xcode biasa mencentang kotak ini untuk Anda secara default dalam situasi ini, tetapi sekarang tidak lagi.
Centang kotak untuk salah satu pengontrol tampilan di storyboard Anda dan Anda akan melakukannya dengan baik.
sumber
Saya khawatir Anda harus melalui semua 30 dari mereka, dan memeriksa apakah mereka memiliki ID Storyboard atau segue ke pengontrol tampilan itu. Salah satu dari keduanya diperlukan, keduanya juga merupakan opsi.
sumber
Masalah ini dapat terjadi dalam salah satu skenario berikut ini:
Kasus I: Jika tidak ada adegan di storyboard yang ditandai sebagai "isInitialViewController" .
Fix: Identifikasi pengontrol tampilan root dan tandai sebagai "isInitialViewController" di SB Anda. Dalam hal ini id storyboard tidak wajib.
Kasus II
Mungkin ada situasi di mana Anda tidak perlu memiliki initialViewController di storyboard. Misalnya: saat menggunakan Beberapa storyboard.
Cara Memperbaiki: Dalam kasus seperti itu, pastikan "id papan cerita" diberikan dengan benar dan Anda mengacu pada adegan pertama yang digunakan di papan cerita menggunakan id ini. Misalnya:
UIStoryboard *myStoryBoard = [UIStoryboard storyboardWithName:@"MyStoryBoardName" bundle:nil]; MyViewController *myViewController = (MyViewController *)[myStoryBoard instantiateViewControllerWithIdentifier:@"MyViewControllerId"];
Dalam hal ini "id papan cerita" adalah wajib.
Kasus III
Anda memiliki initialViewController yang terhubung. Tapi tetap saja Anda mendapatkan peringatan ini. Ini karena beberapa adegan di storyboard mungkin tidak terhubung dengan "segue" dan juga tidak memiliki "id storyboard" . Pindai storyboard Anda, lihat apakah "segue" diperlukan. Hubungkan segue jika tidak ada. Jika segue tidak diperlukan, pastikan Anda perlu memberikan "id storyboard" karena ini adalah satu-satunya cara untuk merujuk adegan dari kode Anda, seperti yang ditunjukkan pada contoh kode di atas.
Semoga ini membantu
sumber
Anda tidak perlu mengatur
Storyboard ID
untuk semua adegan atauUINavigationController
Saya memiliki sekitar 50-60 adegan dan saya baru saja mendapat peringatan ini sehingga saya menyadari bahwa hanya pengontrol (Scene) atau NavigationController yang tidak terhubung dengan segue yang perlu disetel
Storyboard ID
.Anda dapat melihat bahwa pada gambar di atas
UINavigationController
tidak berhubungan dengan segue, itu adalah penyebab peringatan itu.Cukup berikan ID Storyboard untuk menghapus peringatan ini.
sumber
Saya memiliki masalah yang sama. Saya mendapat banyak penayangan di papan cerita saya dengan pengontrol bilah navigasi dan tab. Bagi saya itu hanya peringatan untuk memberi tahu Anda bahwa beberapa pandangan tidak terhubung. Pastikan semua tampilan Anda terhubung dengan cara tertentu ke pengontrol tampilan root . Saya memulai proyek ini dari awal untuk menghilangkan peringatan ini dan memperhatikan peringatan yang sama ketika tampilan tidak terhubung.
sumber
Cara termudah untuk menemukan adegan yang menyinggung:
Buka navigator masalah (di panel kiri, di samping tombol pencarian), dan klik dua kali kesalahan tersebut. Sebuah jendela akan muncul berisi adegan menyinggung yang berpusat di tengah jendela.
(Ini sebenarnya secara umum benar - mengklik dua kali kesalahan apa pun umumnya akan menghasilkan munculan yang berisi kesalahan di tengah - trik kecil yang rapi!)
Catatan samping: Terkadang, XCode salah memberikan kesalahan ini untuk adegan yang merupakan pengontrol tampilan root dari pengontrol navigasi (yaitu pengontrol tampilan awal). Perbaikan sederhana adalah memberikan pengontrol tampilan root ini ID Storyboard, kompilasi (kesalahan harus hilang), dan kemudian menghapus storyboardID (tidak ada kesalahan lagi).
sumber
Cara termudah untuk melihat pengontrol, atau adegan, yang menyebabkan masalah ini adalah dengan:
.storyboard
di Project Navigator dan memilihOpen As > Source Code
. Ini akan memunculkan XML yang mendasari Storyboard.Sekarang, dalam kasus saya, peringatan itu sangat mengganggu karena "adegan yang menyinggung" memiliki pengenal dan segue! Saya bisa memperbaiki masalah dengan menghapus adegan dan kemudian membatalkan penghapusan. Tidak elegan, tapi berhasil. Saya menyimpan Storyboard saya sebelum melakukan ini. Dalam retrospeksi, saya seharusnya membuat salinan dan
diff
sebelum-sesudahnya.sumber
Source Code
tampilan tidak menunjukkan kesalahan. Jadi, jarak tempuh bisa bervariasi.Bagi saya, itu bukan karena a
Storyboard ID
atau aSegue
. Saya menerima peringatan ini karena saya belum menyetelView Controller's Custom Class
.Pilih
View Controller
diStoryboard
, lalu diUtilities Pane
, pilihIdentity Inspector
ikon. Di bawahCustom Class
, lihat nilai apa yang ada di dalamClass
bidang.Jika hanya tertulis
UIViewController
, maka Anda perlu mengetikkan nama kelas. Ini akan menjadi nama.h
dan.m
file Anda yang membentukUIViewController
subkelas khusus Anda .sumber
Saya sampai pada pertanyaan ini hari ini. Saya menggunakan Xcode 6.3 dan jawaban untuk pertanyaan OP cukup sederhana sekarang:
Pilih View Controller yang Anda inginkan menjadi yang pertama, tunjukkan Attributes Inspector, dan di bawah bagian View Controller, pastikan
Apakah Pengontrol Tampilan Awal
diperiksa. Voilà!
sumber
Dengan Xcode 7 ini dapat ditangani dengan mudah. Tidak perlu menelusuri semua adegan secara manual untuk menemukan adegan yang bermasalah. Pertama, buka navigator Laporan , tempat Anda bisa mendapatkan info lebih detail tentang masalah yang diketahui. Deskripsi masalah dapat terlihat seperti ini:
Base.lproj / Main.storyboard: fPh-fe-F5F : peringatan: Scene tidak dapat dijangkau karena kurangnya titik masuk dan tidak memiliki pengenal untuk akses runtime melalui -instantiateViewControllerWithIdentifier :.
Dengan info ini, Anda dapat menyalin id objek, dalam hal ini adalah fPh-fe-F5F , dan mencari ruang kerja untuk terjadinya string ini. String akan ditemukan di file Main.storyboard. Klik dua kali pada hasil pencarian dan itu akan membuka Main.storyboard dengan adegan yang dipilih. Setelah mengetahui adegan yang bermasalah, Anda dapat dengan mudah memperbaiki masalah tersebut, dengan menyetel ID storyboard atau menyetel "Is Initial View Controller"
sumber
Anda tinggal menyetel pengenal. Pada inspektur atribut di panel kanan, Anda akan menemukan bidang bernama "Identifier". Letakkan saja string apa saja di sana, ini akan berfungsi
Anda dapat mengklik pada pengontrol navigasi dan di bawah atribut inspektur, klik tombol "adalah pengontrol tampilan awal", dan ini juga akan berfungsi.
sumber
saya menghadapi masalah yang sama dan diselesaikan dengan memasang ID storyboard pengenal untuk semua viewController dan NavigationController juga; kesalahan akan segera dihapus
Nikmati!!!
sumber
Mungkin XQuery ini akan membantu Anda menemukan adegan-adegan buruk itu
for $i in .//scene/objects/*[1][not(@storyboardIdentifier) or @storyboardIdentifier= '']/@id (: find every scene that has an empty storyboardIdentifier :) where count(.//segue[@destination= $i])= 0 and $i!= ./document/@initialViewController (: filter the results to the scenes that are not destinations of a segue and exclude the initialViewController :) return ($i, $i/../@customClass) (: return the storyboard-id and the customClass, if any :)
Jika Anda menginstal xqilla, Anda akan menyimpan kueri ke file dan menggunakannya seperti
xqilla <xqueryfile> -i <path to your storyboard>
sumber
Saya tidak tahu apakah ini belum disebutkan atau tidak, tetapi alasan lain Anda bisa mendapatkan peringatan ini adalah jika Anda memiliki aliran ke arah yang salah. Misalnya, dalam proyek saya, saya mendapatkan peringatan ini tetapi semua pengontrol saya sebenarnya terhubung. Namun, salah satunya memiliki segue yang pada dasarnya mencoba menghadirkan orang tua dari anak, bukan orang tua yang menghadirkan anak. Ini menyebabkan peringatan yang sama.
sumber
Saya mendapat peringatan ini ketika saya memiliki UIViewController di Storyboard yang tidak ada yang disetel. Saya menghindari peringatan ini dengan mengatur ID Storyboard padanya.
sumber
Saya memiliki masalah yang sama, tetapi saya menyadari bahwa saya menggunakan tampilan kontainer dan alih-alih menghapus pengontrol tampilan default, saya menghapus segue-nya. Jadi pengontrol tampilan tetap di storyboard dan begitu pula peringatannya. Jadi ini adalah salah satu kasus di mana peringatan muncul jika pengontrol tampilan default dari tampilan kontainer tidak dihapus dengan benar saat Anda tidak membutuhkannya.
sumber
Saya mencoba semua yang dijelaskan di atas tetapi tidak berhasil. Saya memiliki semuanya terhubung dengan benar di IB, dengan tepat satu yang
UIViewController
ditunjuk sebagai pengontrol tampilan root. Saya tidak memiliki pengenal tetapi menambahkannya ke semua pengontrol saya.Satu-satunya cara saya bisa menghilangkan peringatan itu adalah dengan melakukan semua hal di atas (termasuk reboot komputer dan clean build) kemudian beralih ke cabang proyek saya yang bebas kesalahan di git dan kembali lagi.
Tidak yakin tindakan mana yang memperbaikinya, atau kombinasi tindakan mana, tetapi itu bukan clean build sendiri. Ini mungkin produk sampingan dari Main.storyboard yang selalu berubah setelah dibuka, yang berarti saya harus melakukannya
git commit -m "Stupid storyboard"
lebih sering daripada yang saya inginkan.sumber
Inilah yang berhasil untuk saya:
sumber
Saya mendapat kesalahan yang sama: Bagi saya kesalahannya adalah saya tidak memulai pengontrol tampilan di papan cerita saya.
Memperbaiki itu menghapus peringatan itu.
sumber
Cukup memberi semua MVC id storyboard sudah berhasil untuk saya.
sumber