iOS 7 - Gagal membuat pengontrol tampilan default

93

Saya menggunakan Xcode 5 di aplikasi yang baru dibuat dan ketika saya baru membuatnya, saya menggunakan tombol run e klik di atasnya, maka proyek akan dibangun tetapi tidak muncul di iOS Simulator dan saya mendapatkan pesan berikut:

 Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - 
 perhaps the designated entry point is not set?

Saya sudah mencari di Google tentang hal itu tentu saja dan semua orang menunjukkan bahwa ini terjadi karena Xcode belum tahu pengontrol tampilan mana yang pertama. Tetapi yang aneh adalah saya membuat aplikasi sebagai aplikasi berbasis halaman (juga mencoba opsi aplikasi tampilan tunggal dan tab) dan XCode sudah menentukan Storyboard untuk itu.

Juga, ketika saya pergi ke opsi antarmuka utama dari proyek storyboard (dinamai "Utama" oleh Xcode itu sendiri) diatur, dan di Storyboard, pengontrol tampilan saya ditetapkan sebagai "Pengontrol Tampilan Awal"

masukkan deskripsi gambar di sini

Apa yang salah?

rodrigoalvesvieira
sumber
mencoba untuk mengaturnya secara program ...
Shamsudheen TK
@Ramshad Hai, saya termasuk pemula dalam pengembangan iOS. Bagaimana saya bisa melakukan itu?
rodrigoalvesvieira
2
Pastikan untuk menyetel pengontrol tampilan menjadi pengontrol tampilan awal.
Sandeep
Seperti yang ditunjukkan Kashif Ahmed, Anda juga perlu membuka file Info.plist Anda sebagai kode sumber dan mengedit string <key> UISceneStoryboardFile </key> dan memberikan nama storyboard baru Anda di sana.
bogdan

Jawaban:

56

Jadi ini juga terjadi pada saya juga. Saya memeriksa 50 kali dan "Is Initial View Controller" saya diperiksa, percayalah. Itu terjadi secara tiba-tiba. Jadi bagaimana cara memperbaikinya?

  1. Buat Storyboard baru di proyek Anda, beri nama seperti Main_iPhoneV2 (atau iPadV2 tergantung pada gaya storyboard asli Anda)
  2. Buka storyboard rusak, klik di mana saja di area putih dan tekan perintah-a, lalu perintah-c (pilih semua dan salin)
  3. Buka storyboard baru Anda dan tekan command-v untuk menempelkan pengaturan yang sama persis
  4. Buka pengaturan proyek Anda, ubah "Antarmuka Utama" Anda ke Main_iPhoneV2 baru (Jika iPad Anda dan Anda sedang menulis aplikasi universal, Anda harus mengedit -Info.plist dan mencari nilai "File storyboard utama nama dasar (iPad)
  5. Kompilasi ulang, dan berhenti menarik rambut Anda
Ryna
sumber
3
mengalami masalah yang sama saat mencoba langkah-langkah yang tercantum di Dasar-Dasar Pengembang. Membuat Papan Cerita baru, menandai yang baru sebagai pengontrol tampilan awal dan menetapkan yang baru sebagai papan cerita Utama melalui Info Penerapan Proyek. Ini secara ajaib mulai bekerja. Tidak yakin apakah ini bug dengan Xcode. developer.apple.com/library/ios/referencelibrary/GettingStarted/…
ioWint
Ini tidak berhasil atau saya yakin tidak akan berfungsi, kecuali dan sampai pengontrol navigasi awal disetel sebagai "adalah Inital View Controller".
Sumit Kumar Saha
Saya akan mencoba ini. Tapi kemudian saya membersihkan dan membangun lagi dan berhasil
Skywalker
306

Periksa Apakah Pengontrol Tampilan Awal di Attributes Inspector.

masukkan deskripsi gambar di sini

Ashvin Ajadiya
sumber
Tentu saja ini adalah 'cara kerjanya'. Tetapi saya telah menemukan 'bug' juga, dan kemudian ini tidak berfungsi. Membuat yang baru, dan menyalin semua barang Anda berhasil! dalam kasus saya.
Tys
Tapi pengontrol tampilan-nya sudah disetel sebagai Pengontrol Tampilan Awal, bukan?
Iurii Vasylenko
@YuraVasylenko: Ini tidak sebelumnya, jadi saya telah menunjukkan tanda sebagai dipilih.
Ashvin Ajadiya
1
Hanya untuk membuatnya sedikit lebih detail bagi mereka yang membutuhkannya, Mengatur Pengontrol Awal untuk Papan Cerita
Sergei Basharov
40

Pertama klik pada View Controller di sisi kanan bilah Utilities . Selanjutnya pilih Attributes Inspector dan pastikan bahwa di bawah bagian View Controller, kotak centang 'Is Initial View Controller' dicentang!

Andy
sumber
1
Ini adalah masalahku. Saya menghapus pengontrol tampilan default yang dimiliki storyboard saya dan ketika saya menambahkan yang lain harus memeriksanya.
Orgmir
18

Peringatan ini juga dilaporkan jika Anda memiliki beberapa kode seperti:

    window = UIWindow(frame: UIScreen.mainScreen().bounds)
    window?.rootViewController = myAwesomeRootViewController
    window?.makeKeyAndVisible()

Dalam kasus ini, buka halaman pertama setelan target dan setel Main Interfaceke kosong, karena Anda tidak memerlukan entri storyboard untuk aplikasi Anda.

superarts.org
sumber
14

Menggunakan Interface Builder:

Periksa apakah ' Is initial view controller ' disetel. Anda dapat mengaturnya menggunakan langkah-langkah di bawah ini:

  1. Pilih pengontrol tampilan Anda (yang akan ditampilkan sebagai layar awal).
  2. Pilih Atribut inspektur dari jendela Utilitas .
  3. Pilih ' Is Initial View Controller ' dari bagian View Controller (jika tidak).

Jika Anda sudah melakukan langkah ini dan masih mendapatkan error uncheck and do it again.

Langkah-langkah untuk memecahkan masalah

Menggunakan secara terprogram:

Objective-C:

        self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

        UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"HomeViewController"]; // <storyboard id>

        self.window.rootViewController = viewController;
        [self.window makeKeyAndVisible];

        return YES;

Swift:

        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

        var objMainViewController: MainViewController = mainStoryboard.instantiateViewControllerWithIdentifier("MainController") as! MainViewController

        self.window?.rootViewController = objMainViewController

        self.window?.makeKeyAndVisible()

        return true
Jayprakash Dubey
sumber
3
Jika Anda melakukannya secara terprogram, pastikan untuk menghapus storyboard Anda dari Antarmuka Utama target - biarkan kosong. Ini juga harus masuk didFinishLaunchingWithOptions.
Jordan H
@ JordanH bagaimana cara menghapus storyboard dari Antarmuka Utama target?
PascalS
@Passe Pilih teks dan tekan hapus, ada di tab Umum
Jordan H
12

Saya telah mengalami ini dengan Pengontrol Tab Bar saya tidak muncul di Simulator bersama dengan layar hitam. Saya melakukan hal berikut agar aplikasi saya muncul di Simulator.

  1. Pergi ke Main.storyboard.
  2. Periksa di Is Initial View Controllerbawah tab inspektur Atribut.

Apakah Pengontrol Tampilan Awal di Attributes Inspector.

Kontra Bulaquena
sumber
10

Atur jendela secara manual,

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    if (!application.keyWindow.rootViewController) 
     {
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

        UIViewController *myViewController= [storyboard instantiateViewControllerWithIdentifier:@"myViewController identifier"];

         application.keyWindow.rootViewController = myViewController;
     }
}
Shamsudheen TK
sumber
Apakah ini memerlukan penghapusan centang pada viewcontroller awal di storyboard?
bdv
7

Saya mendapatkan kesalahan ini saat saya mengubah nama file storyboard " Main.storyboard " KE: " XXX.storyboard "

Solusi bagi saya adalah:

  • Produk-> Bersih
  • PERUBAHAN: File Pendukung -> info.plist -> Nama dasar file storyboard utama -> Main TO: XXX

Semoga berhasil

Hovanes Mosoyan
sumber
3

Produk "Bersih" adalah solusi bagi saya.

Walter Schurter
sumber
3

masukkan deskripsi gambar di sini

Selain jawaban yang benar di atas, pastikan juga Anda telah mengatur Antarmuka Utama yang benar secara Umum.

Naren
sumber
3

Opsi pertama

jika Anda ingin menyetel storyboard kustom Anda alih-alih pengontrol tampilan default.

Ubah atribut ini dari file info.plist

<key>UISceneStoryboardFile</key> <string>Onboarding</string>

Orientasi akan menjadi nama papan cerita Anda

untuk membukanya, klik kanan pada file info.plist dan buka sebagai kode sumber

Opsi kedua

1- Klik pada proyek Anda

2- Pilih proyek Anda dari bagian target

3- Pindah ke bagian Antarmuka penyebaran

4- Ubah bagian storyboard Anda dari bidang Antarmuka Utama

Harap ingat mengatur pengontrol tampilan awal storyboard Anda

Kashif Ahmed
sumber
1
Hal <key> UISceneStoryboardFile </key> telah memperbaikinya untuk saya. Terima kasih.
bogdan
2

Jika Anda menambahkan storyboard baru, maka Anda harus memeriksa poin-poin berikut.

1) Dalam file plist, nilai cek nama basis file Main storyboard (iPad) atau (iPhone) harus cocok dengan nama file storyboard Anda ( jangan tambahkan ekstensi .storyboard )

2) Di storyboard harus ada satu pengontrol tampilan yang ditetapkan sebagai pengontrol tampilan awal

3) Bersihkan dan bangun proyek Anda. :)

masukkan deskripsi gambar di sini

Sachin Nikumbh
sumber
1

Jika Anda telah memasukkan kode Anda ke kontrol sumber secara teratur, ini dapat menyelamatkan Anda dari kerumitan membuat Storyboard baru dan mungkin menimbulkan lebih banyak masalah ...

Saya dapat menyelesaikan ini dengan membandingkan kode sumber Git dari versi yang berfungsi dengan yang rusak. Perbedaan menunjukkan bahwa baris pertama harus berisi Id dari pengontrol tampilan awal, dalam kasus saya, initialViewController = "Q7U-eo-vxw" . Saya mencari melalui kode sumber untuk memastikan bahwa id itu ada. Yang harus saya lakukan adalah mengembalikannya dan semuanya bekerja kembali!

<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="5056" systemVersion="13E28" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" initialViewController="Q7U-eo-vxw">
    <dependencies>
        <deployment defaultVersion="1296" identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/>
    </dependencies>
    <scenes>

Berikut beberapa langkah yang dapat membantu Anda memecahkan masalah:

  1. Klik kanan Storyboard yang gagal dan gunakan Source Control> Commit ... untuk menyimpan perubahan Anda sejak komit terakhir.
  2. Coba klik kanan Storyboard Anda yang gagal dan gunakan "Open As> Source Code" untuk melihat XML storyboard.
  3. Di elemen dokumen , cari atribut bernama " initialViewController ". Jika hilang, jangan khawatir, kami akan memperbaikinya. Jika ada, klik dua kali id ​​yang ditetapkan padanya, perintah-c untuk menyalinnya, perintah-f perintah-v untuk mencarinya lebih dalam di dokumen. Ini adalah pengenal pengontrol yang harus menyediakan tampilan awal. Jika tidak didefinisikan dalam dokumen maka itu menjadi masalah - Anda harus menghapusnya dari tag dokumen, dalam kasus saya initialViewController = "Q7U-eo-vxw" .
  4. Buka item menu Xcode bernama View dan pilih Version Editor> Show Comparison View
  5. Ini menunjukkan versi lokal Anda di sebelah kiri dan versi historis di sebelah kanan. Klik pada tanggal di bawah versi historis untuk mendapatkan daftar komitmen untuk papan cerita ini. Pilih salah satu yang Anda tahu berfungsi dan bandingkan elemen dokumen . Apa id dari * initialViewController ? Apakah ini berbeda? Jika demikian, coba edit kembali dengan tangan dan jalankan. xcode alat perbandingan historis beraksi
neoscribe
sumber
1

Periksa apakah Anda memiliki jendela var di AppDelegate.

var window: UIWindow? 

Dan juga periksa storyboard file Info.plist Anda.

<key>UIMainStoryboardFile</key>
<string>Main</string>

Menyetel rootViewController secara terprogram di AppDelegate tidak akan memperbaiki peringatan. Anda harus memilih apakah akan membiarkan storyboard menyetel pengontrol tampilan atau melakukannya secara terprogram.

rockdaswift
sumber
1

Proyek yang dibuat di Xcode 11 ke atas, cukup mengubah file Antarmuka Utama dari pengaturan proyek tidak akan cukup.

Anda harus mengedit file Info.plist secara manual dan mengatur nama storyboard UISceneStoryboardFilejuga.

Isuru
sumber
1

Tak satu pun di atas menyelesaikan masalah untuk saya. Dalam kasus saya, itu juga tidak mengatur manifes adegan aplikasi yang benar.

Saya harus mengubah LoginScreen dulu menjadi Utama

masukkan deskripsi gambar di sini

Julian Silvestri
sumber
Terkejut karena tidak mendapatkan suara sebanyak ini. Ini akan terjadi di hampir semua implementasi SceneDelegate (yang tidak menggunakan Storyboard sebagai pengontrol awal).
bauerMusic