source

UIMainStoryboardFile 'Main'에 대한 기본 뷰 컨트롤러를 인스턴스화하지 못했습니다. 지정된 진입점이 설정되지 않은 것 같습니다.

ittop 2023. 8. 15. 11:44
반응형

UIMainStoryboardFile 'Main'에 대한 기본 뷰 컨트롤러를 인스턴스화하지 못했습니다. 지정된 진입점이 설정되지 않은 것 같습니다.

새로 만든 앱에서 Xcode를 사용하고 있는데 프로젝트를 실행할 때 iOS Simulator에 표시되지 않고 다음 메시지가 표시됩니다.

UIMainStoryboardFile 'Main'에 대한 기본 뷰 컨트롤러를 인스턴스화하지 못했습니다. 지정된 진입점이 설정되지 않은 것 같습니다.

물론 구글에 검색해봤는데 Xcode가 어떤 뷰 컨트롤러가 초기 컨트롤러인지 아직 모르기 때문에 이런 일이 일어나고 있다고 모두가 지적합니다.그런데 이상한 것은 제가 앱을 페이지 기반(싱글 뷰 및 탭 방식 앱 옵션도 시도) 앱으로 만들었고 Xcode가 이미 스토리보드를 정의했다는 것입니다.

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

Is Initial View Controller

뭐가 문제야?

특성 검사기에서 초기컨트롤러임을 선택합니다.

enter image description here

그래서 저에게도 이런 일이 일어났습니다.저는 50번이나 확인했고 제 "Is Initial View Controller"가 확인되었습니다.갑자기 일어난 일입니다.어떻게 고쳤을까요?

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

먼저 오른쪽 유틸리티 표시줄에서 View Controller(보기 컨트롤러)를 클릭합니다.그런 다음 Attributes Inspector(속성 검사기)를 선택하고 View Controller(보기 컨트롤러) 섹션에서 'Is Initial View Controller(초기 보기 컨트롤러)' 확인란이 선택되어 있는지 확인합니다!

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

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

이 경우 다음으로 이동합니다.Target > General > Deployment Info 트세를 합니다.Main Interface앱에 스토리보드 항목이 필요하지 않으므로 비우려면:

empty Main Interface

제 탭 바 컨트롤러가 검은색 화면과 함께 시뮬레이터에 나타나지 않는 것을 경험했습니다.제 앱이 시뮬레이터에 표시되도록 하기 위해 다음을 수행했습니다.

  1. 메인 스토리보드로 이동합니다.
  2. 항목을 합니다.Is Initial View Controller속성 검사기 탭 아래에 있습니다.

Is Initial View Controller in the Attributes Inspector.

실수로 해당 뷰 컨트롤러를 삭제했거나 다른 방법으로 기본값이 아닌 상태로 만든 경우, 앱이 시작될 때 일반 검은색 화면과 함께 "UIM의 기본 뷰 컨트롤러를 인스턴스화하지 못했습니다. Storyboard File 'Main' - 아마도 지정된 진입점이 설정되지 않았습니다."라는 오류가 표시됩니다.

문제를 해결하려면 Main.storyboard 파일을 열고 앱을 처음 실행할 때 표시할 뷰 컨트롤러를 찾습니다.이 옵션을 선택하면 속성 검사기로 이동하여 "초기 뷰 컨트롤러 여부" 확인란을 선택합니다.해당 보기 컨트롤러의 왼쪽에 오른쪽 화살표가 나타나 스토리보드의 시작 지점임을 나타냅니다.

인터페이스 작성기 사용:

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

  1. 초기 화면으로 표시할 보기 컨트롤러를 선택합니다.
  2. 유틸리티 에서 Attribute inspector(속성 검사기)를 선택합니다.
  3. View Controller(보기 컨트롤러) 섹션에서 'Is Initial View Controller(초기 보기 컨트롤러)'를 선택합니다(그렇지 않은 경우).

이 단계를 수행했지만 여전히 오류가 발생하는 경우uncheck and do it again.

Steps to solve problem

프로그래밍 방식으로 사용:

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

창을 수동으로 설정합니다.

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

위의 어떤 것도 저를 위해 그 문제를 해결해주지 않았습니다.저의 경우에는 또한 올바른 애플리케이션 장면 매니페스트를 설정하지 않았습니다.

로그인 화면을 메인으로 변경해야 했습니다.

enter image description here

스토리보드 파일 이름 "Main.storyboard"를 "XXX.storyboard"로 변경하면 이 오류가 발생합니다.

해결책은 다음과 같습니다.

  • 상품->클린
  • 변경사항 : 지원 파일 -> info.plist -> 메인 스토리보드 파일 기본 이름 -> 메인 대상 : XXX

행운을 빌어요

제품 "Clean"이 저에게 해결책이었습니다.

새 스토리보드를 추가한 경우 다음 사항을 확인해야 합니다.

  1. 목록 파일에서 메인 스토리보드 파일 기본 이름(iPad) 또는 (iPhone)의 확인 값이 스토리보드 파일 이름(확장자 .storyboard 추가 안 함)과 일치해야 합니다.

  2. 스토리보드에는 Is initial view controller로 설정된 뷰 컨트롤러가 하나 있어야 합니다.

  3. 프로젝트를 정리하고 빌드합니다.:)

enter image description here

enter image description here

위의 정답 외에도 기본 인터페이스를 일반적으로 올바르게 설정했는지 확인합니다.

첫 번째 옵션

기본 보기 컨트롤러 대신 사용자 지정 스토리보드를 설정하려는 경우.

info.plist 파일에서 이 특성 변경

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

온보딩은 당신의 스토리보드 이름일 것입니다.

info.plist 파일을 마우스 오른쪽 버튼으로 클릭하여 소스 코드로 엽니다.

두 번째 옵션

1 - 프로젝트를 클릭

2 - 대상 섹션에서 프로젝트 선택

3 - 배포 인터페이스 섹션으로 이동

4 - 메인 인터페이스 필드에서 스토리보드 섹션 변경

스토리보드 초기 보기 컨트롤러를 설정하십시오.

Xcode 11 이상에서 생성된 프로젝트는 프로젝트 설정에서 기본 인터페이스 파일을 변경하는 것만으로는 충분하지 않습니다.

하고 Info.plist .UISceneStoryboardFile뿐만 아니라.

소스 제어를 위해 코드를 정기적으로 커밋해 왔다면 새 스토리보드를 만들고 더 많은 문제를 발생시키는 번거로움을 줄일 수 있을 것입니다.

작동하는 버전의 Git 소스 코드와 고장난 버전의 Git 소스 코드를 비교하여 해결할 수 있었습니다.diff는 첫 번째 줄에 초기 뷰 컨트롤러의 ID가 포함되어야 한다는 것을 보여주었습니다. 이 경우 initialViewController="Q7U-eo-vxw"입니다.나는 ID가 있는지 확인하기 위해 소스 코드를 검색했습니다.내가 해야 할 일은 그것을 다시 놓는 것이었고 모든 것이 다시 작동했습니다!

<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. 실패한 스토리보드를 마우스 오른쪽 단추로 클릭하고 소스 제어 > 커밋...을 사용합니다.마지막 커밋 이후의 변경 사항을 보존합니다.
  2. 실패한 스토리보드를 마우스 오른쪽 단추로 클릭하고 "다른 이름으로 열기 > 소스 코드"를 사용하여 스토리보드의 XML을 봅니다.
  3. 문서 요소에서 "initialViewController"라는 속성을 찾습니다.만약 그것이 없어지면, 우리가 그것을 고칠 것이니 걱정하지 마세요.해당 ID가 있는 경우, 할당된 ID를 두 번 클릭하고 command-c를 클릭하여 복사하고 command-f command-v를 클릭하여 문서에서 자세히 검색합니다.초기 보기를 제공해야 하는 컨트롤러의 식별자입니다.문서에 정의되지 않은 경우 문제가 됩니다. 문서 태그에서 제거해야 합니다. 이 경우 initialViewController="Q7U-eo-vxw".
  4. View라는 Xcode 메뉴 항목으로 이동하여 Version Editor > Show Comparision View를 선택합니다.
  5. 왼쪽에는 로컬 버전이 표시되고 오른쪽에는 과거 버전이 표시됩니다.이 스토리보드에 대한 커밋 목록을 보려면 과거 버전 아래의 날짜를 클릭하십시오.작동한 것으로 알고 있는 것을 선택하고 문서 요소를 비교합니다.*initialViewController의 ID는 무엇입니까?그거 달라요?그렇다면 수동으로 다시 편집하고 실행해 보십시오.xcode historical compare tool in action

AppDelegate에 창 변수가 있는지 확인합니다.

var window: UIWindow? 

또한 Info.plist 파일의 스토리보드를 확인합니다.

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

AppDelegate에서 rootViewController를 프로그래밍 방식으로 설정해도 경고가 수정되지 않습니다.스토리보드에서 보기 컨트롤러를 설정할 것인지 프로그래밍 방식으로 실행할 것인지 선택해야 합니다.

장면 대표가 있는 경우 info.plist를 체크인해야 합니다.

<key>UIApplicationSceneManifest</key>
    <dict>
        <key>UIApplicationSupportsMultipleScenes</key>
        <false/>
        <key>UISceneConfigurations</key>
        <dict>
            <key>UIWindowSceneSessionRoleApplication</key>
            <array>
                <dict>
                    <key>UISceneConfigurationName</key>
                    <string>Default Configuration</string>
                    <key>UISceneDelegateClassName</key>
                    <string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
                    <key>UISceneStoryboardFile</key>
                    <string>Login</string>
                </dict>
            </array>
        </dict>
    </dict>

Login.storyboard라는 스토리보드를 로드하고 있습니다.

플리스터

"Main"이 아닌 다른 이름으로 새 Storyboard를 만든 경우 몇 가지 문제가 발생하지만 쉽게 조정할 수 있습니다.

원하는 이름으로 새 Storyboard를 만들고 이를 메인 스토리로 사용하려면 다음 작업을 수행합니다.

  1. Attributes Inspector(속성 관리자) 내부의 'Is Initial View Controller' 확인란:1
  2. 원하는 스토리보드를 대상의 '기본 인터페이스'로 선택합니다.2
  3. 프로젝트 Info.plist를 열고 원하는 Storyboard 이름을 값으로 입력해야 하는 'Storyboard Name' 속성을 찾습니다.3

스토리보드를 사용하지 않는 경우

info.plist 열기 info.plist 파일에서 다음 기능 정보 속성 목록 -> 장면 구성 -> 응용 프로그램 세션 역할 -> 항목 0 -> 스토리보드 이름 삭제

XCode 14.0.1에서 작동한 것은 초기 뷰 컨트롤러를 설정하는 것 외에도 빌드 설정에서 업데이트하는 것이었습니다: "UIKIT 메인 스토리보드 파일 기본 이름"은 새 스토리보드의 이름을 새로 만들기 위해 사용되었습니다.

미래의 독자들을 위해: - iOS 13, Swift 5.

SceneDelegate에서 초기 뷰 컨트롤러를 프로그래밍 방식으로 설정했는데, 이를 경고로 받아 뷰 컨트롤러가 완벽하게 설정되었습니다.그래서 Info.plist에서 Storyboard Name을 삭제하면 경고가 영원히 사라집니다.

Info.plist > Application Scene Manifest > Scene Configuration > Application Session Role > 스토리보드 Name > 삭제

기본 스토리보드 이름이 설정되어 있고 실행할 스토리보드 이름과 유사한 경우 info.p 목록을 확인합니다.

언급URL : https://stackoverflow.com/questions/20875823/failed-to-instantiate-the-default-view-controller-for-uimainstoryboardfile-main

반응형