iOS 7 - ไม่สามารถสร้างอินสแตนซ์ตัวควบคุมมุมมองเริ่มต้นได้


94

ฉันใช้ Xcode 5 ในแอพที่สร้างขึ้นใหม่และเมื่อฉันเพิ่งสร้างมันฉันไปที่ปุ่มวิ่งและคลิกที่มันจากนั้นโปรเจ็กต์จะถูกสร้างขึ้น แต่ไม่แสดงใน iOS Simulator และฉันได้รับข้อความต่อไปนี้:

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

แน่นอนว่าฉันเคย Googled มาแล้วและทุกคนก็ชี้ให้เห็นว่าสิ่งนี้เกิดขึ้นเนื่องจาก XCode ยังไม่รู้ว่าตัวควบคุมมุมมองใดเป็นตัวเริ่มต้น แต่สิ่งที่แปลกคือฉันสร้างแอพเป็นแบบเพจ (ลองใช้แอพแบบมุมมองเดียวและแบบแท็บด้วย) และ XCode ได้กำหนด Storyboard ไว้แล้ว

นอกจากนี้เมื่อฉันไปที่ตัวเลือกอินเทอร์เฟซหลักของโปรเจ็กต์จะมีการตั้งค่าสตอรีบอร์ด (ชื่อ "หลัก" โดย Xcode เอง) และใน Storyboard ตัวควบคุมมุมมองของฉันถูกตั้งค่าเป็น "ตัวควบคุมมุมมองเริ่มต้น"

ป้อนคำอธิบายภาพที่นี่

เกิดอะไรขึ้น?


ลองตั้งโปรแกรม ...
Shamsudheen TK

@Ramshad สวัสดีฉันเป็นมือใหม่ในการพัฒนา iOS ฉันจะทำเช่นนั้นได้อย่างไร?
rodrigoalvesvieira


2
ตรวจสอบให้แน่ใจว่าได้ตั้งค่าตัวควบคุมมุมมองเป็นตัวควบคุมมุมมองเริ่มต้น
Sandeep

ตามที่ Kashif Ahmed ชี้ให้เห็นคุณต้องเปิดไฟล์ Info.plist ของคุณเป็นซอร์สโค้ดและแก้ไขสตริง <key> UISceneStoryboardFile </key> และระบุชื่อสตอรี่บอร์ดใหม่ของคุณ
bogdan

คำตอบ:


56

สิ่งนี้ก็เกิดขึ้นกับฉันเช่นกัน ฉันตรวจสอบ 50 ครั้งและ "Is Initial View Controller" ของฉันถูกตรวจสอบเชื่อฉัน มันเกิดขึ้นจากสีน้ำเงิน แล้วฉันจะแก้ไขได้อย่างไร?

  1. สร้างสตอรี่บอร์ดใหม่ในโปรเจ็กต์ของคุณตั้งชื่อว่า Main_iPhoneV2 (หรือ iPadV2 ขึ้นอยู่กับสไตล์สตอรี่บอร์ดดั้งเดิมของคุณ)
  2. เปิดสตอรีบอร์ดที่เสียแล้วคลิกที่ใดก็ได้ในพื้นที่สีขาวแล้วกด command-a จากนั้นจึง command-c (เลือกทั้งหมดและคัดลอก)
  3. เปิดสตอรีบอร์ดใหม่ของคุณแล้วกด command-v เพื่อวางการตั้งค่าเดียวกัน
  4. ไปที่การตั้งค่าโปรเจ็กต์ของคุณเปลี่ยน "อินเทอร์เฟซหลัก" เป็น Main_iPhoneV2 ใหม่ (หากเป็น iPad ของคุณและคุณกำลังเขียนแอปสากลคุณจะต้องแก้ไข -Info.plist และมองหาค่า "ไฟล์สตอรี่บอร์ดหลัก ชื่อฐาน (iPad)
  5. เรียบเรียงใหม่และหยุดดึงผมของคุณออก

3
พบปัญหาเดียวกันขณะลองทำตามขั้นตอนที่ระบุไว้ใน Developer Basics สร้าง Storyboard ใหม่ทำเครื่องหมายใหม่เป็นตัวควบคุมมุมมองเริ่มต้นและตั้งค่าใหม่เป็นกระดานเรื่องราวหลักผ่านข้อมูลการปรับใช้โครงการ มันเริ่มทำงานอย่างน่าอัศจรรย์ ไม่แน่ใจว่ามีบั๊กกับ Xcode หรือไม่ developer.apple.com/library/ios/referencelibrary/GettingStarted/…
ioWint

สิ่งนี้ไม่ได้ผลหรือฉันเชื่อว่าจะไม่ทำงานเว้นแต่และจนกว่าตัวควบคุมการนำทางเริ่มต้นจะถูกตั้งค่าเป็น "is Inital View Controller"
Sumit Kumar Saha

ฉันจะลองสิ่งนี้ แต่แล้วฉันก็ทำความสะอาดและสร้างอีกครั้งและใช้งานได้
Skywalker

307

Check Is Initial View Controllerใน Attributes Inspector

ป้อนคำอธิบายภาพที่นี่


แน่นอนว่านี่คือ 'วิธีที่ควรใช้' แต่ฉันพบ 'ข้อบกพร่อง' เช่นกันและไม่ได้ผล สร้างใหม่และคัดลอกข้อมูลทั้งหมดของคุณได้ผล! ในกรณีของฉัน
Tys

แต่ตัวควบคุมมุมมองของเขาถูกตั้งค่าเป็น Initial View Controller แล้วใช่หรือไม่?
Iurii Vasylenko

@YuraVasylenko: มันไม่เคยมีมาก่อนดังนั้นฉันจึงระบุด้วยเครื่องหมายว่าเลือก
Ashvin A

1
เพื่อให้รายละเอียดมากขึ้นสำหรับผู้ที่ต้องการการตั้งค่าตัวควบคุมเริ่มต้นสำหรับสตอรี่บอร์ด
Sergei Basharov

41

ขั้นแรกให้คลิกที่ View Controller ในแถบยูทิลิตี้ด้านขวามือ จากนั้นเลือกAttributes Inspectorและตรวจสอบให้แน่ใจว่าในส่วนView Controller นั้นได้เลือกช่องทำเครื่องหมาย"Is Initial View Controller" !


1
นี่คือปัญหาของฉัน ฉันลบตัวควบคุมมุมมองเริ่มต้นที่สตอรีบอร์ดของฉันและเมื่อฉันเพิ่มตัวควบคุมอื่นต้องตรวจสอบสิ่งนี้
ออร์กเมียร์

18

นอกจากนี้ยังมีการรายงานคำเตือนนี้หากคุณมีรหัสบางอย่างเช่น:

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

ในกรณีนี้ไปที่หน้าแรกของการตั้งค่าเป้าหมายและตั้งค่า Main Interfaceเป็นว่างเนื่องจากคุณไม่จำเป็นต้องมีรายการสตอรี่บอร์ดสำหรับแอปของคุณ


14

การใช้ Interface Builder:

ตรวจสอบว่าตั้งค่า" Is initial view controller " ไว้หรือไม่ คุณสามารถตั้งค่าได้โดยใช้ขั้นตอนด้านล่าง:

  1. เลือกตัวควบคุมมุมมองของคุณ (ซึ่งจะปรากฏเป็นหน้าจอเริ่มต้น)
  2. เลือกAttribute inspectorจากUtilitiesหน้าต่าง
  3. เลือก ' Is Initial View Controller ' จากส่วนView Controller (ถ้าไม่ใช่)

หากคุณทำขั้นตอนนี้แล้ว แต่ยังคงได้รับข้อผิดพลาด uncheck and do it again.

ขั้นตอนในการแก้ปัญหา

โดยใช้โปรแกรม:

วัตถุประสงค์ -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;

รวดเร็ว:

        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

3
หากคุณทำโดยใช้โปรแกรมอย่าลืมลบสตอรี่บอร์ดของคุณออกจากอินเทอร์เฟซหลักของเป้าหมาย - ปล่อยว่าง didFinishLaunchingWithOptionsนอกจากนี้ควรจะไปใน
Jordan H

@JordanH จะลบสตอรี่บอร์ดออกจากอินเทอร์เฟซหลักของเป้าหมายได้อย่างไร?
PascalS

@Passe เลือกข้อความและกด Delete ซึ่งอยู่ในแท็บ General
Jordan H

12

ฉันเคยประสบกับสิ่งนี้โดยที่ Tab Bar Controller ของฉันไม่ปรากฏใน Simulator พร้อมกับหน้าจอสีดำ ฉันทำสิ่งต่อไปนี้เพื่อให้แอปของฉันปรากฏในโปรแกรมจำลอง

  1. ไปที่ Main.storyboard
  2. ตรวจสอบIs Initial View Controllerภายใต้แท็บตัวตรวจสอบคุณสมบัติ

เป็น Initial View Controller ใน Attributes Inspector

หากคุณลบตัวควบคุมมุมมองนั้นโดยไม่ได้ตั้งใจหรือทำให้มันไม่ใช่ค่าเริ่มต้นคุณจะเห็นข้อผิดพลาด“ ล้มเหลวในการสร้างอินสแตนซ์ตัวควบคุมมุมมองเริ่มต้นสำหรับ UIMainStoryboardFile 'Main' - อาจไม่ได้ตั้งค่าจุดเข้าที่กำหนดไว้?” เมื่อแอปของคุณเปิดขึ้นพร้อมกับหน้าจอสีดำล้วน

ในการแก้ไขปัญหาให้เปิดไฟล์ Main.storyboard ของคุณและค้นหาตัวควบคุมมุมมองใดก็ตามที่คุณต้องการให้แสดงเมื่อแอปของคุณทำงานครั้งแรก เมื่อเลือกแล้วให้ไปที่ตัวตรวจสอบแอตทริบิวต์และทำเครื่องหมายในช่องที่ระบุว่า "Is Initial View Controller" คุณควรเห็นลูกศรหันขวาปรากฏทางด้านซ้ายของตัวควบคุมมุมมองนั้นซึ่งแสดงว่าเป็นจุดเริ่มต้นของกระดานเรื่องราวของคุณ


10

ตั้งค่าหน้าต่างด้วยตนเอง

- (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;
     }
}

สิ่งนี้จำเป็นต้องยกเลิกการเลือกตัวควบคุมมุมมองเริ่มต้นในกระดานเรื่องราวหรือไม่
bdv

7

ฉันได้รับข้อผิดพลาดนี้เมื่อเปลี่ยนชื่อไฟล์สตอรี่บอร์ด " Main.storyboard " เป็น: " XXX.storyboard "

ทางออกสำหรับฉันคือ:

  • สินค้า -> สะอาด
  • การเปลี่ยนแปลง: ไฟล์ที่รองรับ -> info.plist -> ชื่อฐานของไฟล์สตอรี่บอร์ดหลัก -> Main TO: XXX

โชคดี



3

ป้อนคำอธิบายภาพที่นี่

นอกเหนือจากคำตอบที่ถูกต้องข้างต้นแล้วตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่าอินเทอร์เฟซหลักที่ถูกต้องในทั่วไป


3

ตัวเลือกที่ 1

หากคุณต้องการตั้งสตอรีบอร์ดแบบกำหนดเองแทนตัวควบคุมมุมมองเริ่มต้น

เปลี่ยนแอตทริบิวต์นี้จากไฟล์ info.plist

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

การเริ่มต้นใช้งานจะเป็นชื่อสตอรีบอร์ดของคุณ

เพื่อเปิดคลิกขวาที่ไฟล์ info.plist และเปิดเป็นซอร์สโค้ด

ตัวเลือกที่ 2

1- คลิกที่โครงการของคุณ

2- เลือกโครงการของคุณจากส่วนเป้าหมาย

3- ย้ายไปที่ส่วนอินเทอร์เฟซการปรับใช้

4- เปลี่ยนส่วนสตอรี่บอร์ดของคุณจาก ฟิลด์อินเทอร์เฟซหลัก

โปรดอย่าลืมตั้งค่าตัวควบคุมมุมมองเริ่มต้นของกระดานเรื่องราวของคุณ


1
สิ่งที่ <key> UISceneStoryboardFile </key> แก้ไขให้ฉัน ขอบคุณ.
bogdan

2

หากคุณเพิ่มสตอรีบอร์ดใหม่คุณต้องตรวจสอบประเด็นต่อไปนี้

1) ในไฟล์ plist ค่าการตรวจสอบของคุณหลักชื่อไฟล์ฐานสตอรี่บอร์ด (iPad) หรือ (iPhone) ควรได้รับการจับคู่กับชื่อไฟล์สตอรี่บอร์ด ( ไม่เพิ่มส่วนขยาย.storyboard )

2) ในกระดานเรื่องราวควรมีตัวควบคุมมุมมองหนึ่งตัวซึ่งตั้งค่าเป็นตัวควบคุมมุมมองเริ่มต้น

3) ทำความสะอาดและสร้างโครงการของคุณ :)

ป้อนคำอธิบายภาพที่นี่


2

ไม่มีข้อใดข้างต้นช่วยแก้ปัญหาให้ฉันได้ ในกรณีของฉันมันไม่ได้ตั้งค่ารายการฉากแอปพลิเคชันที่ถูกต้องด้วย

ฉันต้องเปลี่ยน LoginScreen ที่เคยเป็น Main

ป้อนคำอธิบายภาพที่นี่


น่าแปลกใจที่เรื่องนี้ไม่ได้รับการโหวตมากเท่า สิ่งนี้จะเกิดขึ้นในการใช้งาน SceneDelegate ในทางปฏิบัติ (ที่ไม่ได้ใช้ Storyboard เป็นตัวควบคุมเริ่มต้น)
bauerMusic

1

หากคุณใช้รหัสของคุณเพื่อควบคุมแหล่งที่มาเป็นประจำสิ่งนี้อาจช่วยให้คุณไม่ต้องยุ่งยากในการสร้าง Storyboard ใหม่และอาจมีปัญหาเพิ่มเติม ...

ฉันสามารถแก้ปัญหานี้ได้โดยเปรียบเทียบซอร์สโค้ด Git ของเวอร์ชันที่ใช้งานได้กับเวอร์ชันที่เสีย ความแตกต่างแสดงให้เห็นว่าบรรทัดแรกควรมี Id ของตัวควบคุมมุมมองเริ่มต้นในกรณีของฉันinitialViewController = "Q7U-eo-vxw""Q7U-EO-vxw" ฉันค้นหาซอร์สโค้ดเพื่อให้แน่ใจว่ามีรหัสอยู่จริง สิ่งที่ฉันต้องทำคือนำมันกลับมาและทุกอย่างก็กลับมาทำงานอีกครั้ง!

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

ขั้นตอนบางส่วนที่สามารถช่วยคุณแก้ปัญหาได้มีดังนี้

  1. คลิกขวาที่ Storyboard ที่ล้มเหลวและใช้ Source Control> Commit ... เพื่อรักษาการเปลี่ยนแปลงของคุณตั้งแต่การคอมมิตครั้งสุดท้าย
  2. ลองคลิกขวาที่ Storyboard ที่ล้มเหลวและใช้ "Open As> Source Code" เพื่อดู XML ของกระดานเรื่องราว
  3. ในองค์ประกอบเอกสารให้มองหาแอตทริบิวต์ชื่อ " initialViewController " หากหายไปไม่ต้องกังวลเราจะแก้ไข หากมีให้ดับเบิลคลิกที่ id ที่กำหนดให้คำสั่ง -c เพื่อคัดลอก command-f command-v เพื่อค้นหาให้ลึกลงไปในเอกสาร นี่คือตัวระบุของคอนโทรลเลอร์ที่ควรให้มุมมองเริ่มต้น หากไม่ได้กำหนดไว้ในเอกสารนั่นคือปัญหา - คุณควรลบออกจากแท็กเอกสารในกรณีของฉันinitialViewController = "Q7U-eo-vxw""Q7U-EO-vxw"
  4. ไปที่รายการเมนู Xcode ที่เรียกว่า View และเลือก Version Editor> Show Comparison View
  5. แสดงเวอร์ชันท้องถิ่นของคุณทางด้านซ้ายและเวอร์ชันเก่าทางด้านขวา คลิกที่วันที่ด้านล่างเวอร์ชันประวัติศาสตร์เพื่อดูรายการคอมมิตสำหรับสตอรี่บอร์ดนี้ เลือกสิ่งที่คุณรู้ว่าใช้งานได้และเปรียบเทียบองค์ประกอบเอกสาร id ของ* initialViewControllerคืออะไร? แตกต่างกันไหม ถ้าเป็นเช่นนั้นให้ลองแก้ไขด้วยมือและเรียกใช้ เครื่องมือเปรียบเทียบประวัติ xcode ในการดำเนินการ

1

ตรวจสอบว่าคุณมีหน้าต่าง var ใน AppDelegate หรือไม่

var window: UIWindow? 

และตรวจสอบสตอรีบอร์ดของไฟล์ Info.plist ของคุณด้วย

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

การตั้งค่า rootViewController ใน AppDelegate โดยทางโปรแกรมจะไม่แก้ไขคำเตือน คุณควรเลือกว่าจะปล่อยให้สตอรีบอร์ดตั้งค่าตัวควบคุมมุมมองหรือทำโดยใช้โปรแกรม


1

โปรเจ็กต์ที่สร้างใน Xcode 11 ขึ้นไปเพียงแค่เปลี่ยนไฟล์อินเทอร์เฟซหลักจากการตั้งค่าโปรเจ็กต์นั้นไม่เพียงพอ

คุณต้องแก้ไขไฟล์ Info.plist ด้วยตนเองและตั้งชื่อสตอรี่บอร์ดสำหรับไฟล์UISceneStoryboardFile.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.