developer tip

iOS 7-기본 뷰 컨트롤러 인스턴스화 실패

copycodes 2020. 9. 8. 08:10
반응형

iOS 7-기본 뷰 컨트롤러 인스턴스화 실패


새로 만든 앱에서 Xcode 5를 사용하고 있으며 방금 만들 때 실행 버튼을 클릭하고 클릭하면 프로젝트가 빌드되지만 iOS 시뮬레이터에 표시되지 않고 다음 메시지가 표시됩니다.

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

나는 물론 그것에 대해 Google을 검색했으며 XCode가 아직 어떤 뷰 컨트롤러가 초기 컨트롤러인지 알지 못하기 때문에 이것이 일어나고 있다고 모두 지적합니다. 그러나 이상한 점은 앱을 페이지 기반 (단일보기 및 탭 앱 옵션 시도) 앱으로 만들었고 XCode는 이미 스토리 보드를 정의했다는 것입니다.

또한 프로젝트의 기본 인터페이스 옵션으로 이동하면 스토리 보드 (Xcode 자체에서 "Main"이라고 함)가 설정되고 Storyboard에서 내 뷰 컨트롤러는 "Initial View Controller"로 설정됩니다.

여기에 이미지 설명 입력

뭐가 잘못 되었 니?


그래서 이것은 나에게도 일어났습니다. 50 번 확인했고 "Is Initial View Controller"가 확인되었습니다. 그것은 갑자기 일어났습니다. 그래서 어떻게 고쳤습니까?

  1. 프로젝트에서 새 스토리 보드를 만들고 Main_iPhoneV2 (또는 원래 스토리 보드 스타일에 따라 iPadV2)와 같은 이름을 지정합니다.
  2. 깨진 스토리 보드를 열고 흰색 영역의 아무 곳이나 클릭 한 다음 command-a, command-c를 차례로 누릅니다 (모두 선택하고 복사).
  3. 새 스토리 보드를 열고 command-v를 눌러 동일한 설정을 붙여 넣습니다.
  4. 프로젝트 설정으로 이동하여 "주 인터페이스"를 새 Main_iPhoneV2로 변경합니다 (iPad이고 범용 앱을 작성하는 경우 -Info.plist를 편집하고 "Main storyboard file"값을 찾아야합니다. 기본 이름 (iPad)
  5. 다시 컴파일하고 머리카락을 당기지 마십시오.

검사는 초기 뷰 컨트롤러 (가) 경위 속성에.

여기에 이미지 설명 입력


먼저 오른쪽 유틸리티 막대 에서 View Controller를 클릭 합니다. 그런 다음 Attributes Inspector를 선택하고 View Controller 섹션에서 'Is Initial View Controller' 확인란이 선택되어 있는지 확인하십시오!


Interface Builder 사용 :

' Is initial view controller '가 설정되어 있는지 확인하십시오 . 아래 단계를 사용하여 설정할 수 있습니다.

  1. 당신의 선택 뷰 컨트롤러 (초기 화면으로 등장 할 것입니다).
  2. 유틸리티에서 속성 관리자선택합니다 .
  3. View Controller 섹션 에서 ' Is Initial 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

이 경고는 다음과 같은 코드가있는 경우에도보고됩니다.

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

이 경우 Main Interface앱에 대한 스토리 보드 항목이 필요하지 않으므로 대상 설정의 첫 번째 페이지로 이동하여 비워 두십시오.


창을 수동으로 설정하십시오.

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

내 Tab Bar Controller가 시뮬레이터에 검은 색 화면과 함께 나타나지 않는 문제를 경험했습니다. 내 앱이 시뮬레이터에 나타나도록하기 위해 다음을 수행했습니다.

  1. Main.storyboard로 이동합니다.
  2. Is Initial View ControllerAttributes inspector 탭에서 확인 하세요.

Attributes Inspector의 Initial View Controller입니다.


I get this error when I change the the storyboard file name "Main.storyboard" TO: "XXX.storyboard"

The solution for me was:

  • Product->Clean
  • CHANGE: Supporting Files -> info.plist -> Main storyboard file base name -> Main TO: XXX

Good Luck


Product "Clean" was the solution for me.


여기에 이미지 설명 입력

Apart from above correct answer, also make sure that you have set correct Main Interface in General.


If you added new storyboard then you have to check following points.

1) In your plist file check value of Main storyboard file base name (iPad) or (iPhone) should be matched with your storyboard file name (do not add extension .storyboard)

2) In storyboard there should be one view controller which set as Is initial view controller

3) Clean and build your project. :)

여기에 이미지 설명 입력


If you have been committing your code to source control regularly, this may save you the hassle of creating a new Storyboard and possibly introducing more problems...

I was able to solve this by comparing the Git source code of the version that worked against the broken one. The diff showed that the first line should contain the Id of the initial view controller, in my case, initialViewController="Q7U-eo-vxw". I searched through the source code to be sure that the id existed. All I had to do was put it back and everything worked again!

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

Here are some steps that can help you troubleshoot:

  1. Right click the failing Storyboard and use Source Control > Commit... to preserve your changes since the last commit.
  2. Try right clicking your failing Storyboard and use "Open As > Source Code" to view the XML of the storyboard.
  3. In the document element, look for the attribute named "initialViewController". If it is missing, don't worry, we'll fix that. If it is there, double click the id that is assigned to it, command-c to copy it, command-f command-v to search for it deeper in the document. This is the identifier of the controller that should provide the initial view. If it is not defined in the document then that is a problem - you should remove it from the document tag, in my case initialViewController="Q7U-eo-vxw".
  4. Go to Xcode menu item called View and choose Version Editor > Show Comparison View
  5. This shows your local version on the left and the historical version on the right. Click on the date beneath the historical version to get a list of the commits for this story board. Choose one that you know worked and compare the document element. What is the id of the *initialViewController? Is it different? If so, try editing it back in by hand and running. xcode 히스토리 비교 도구 작동

Check if you have the window var in the AppDelegate.

var window: UIWindow? 

And also check the storyboard of your Info.plist file.

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

Programmatically setting the rootViewController in the AppDelegate is not going to fix the warning. You should choose whether to let to the storyboard set the view controller or do it programmatically.

참고URL : https://stackoverflow.com/questions/20875823/ios-7-failing-to-instantiate-default-view-controller

반응형