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


93

새로 만든 앱에서 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"로 설정됩니다.

여기에 이미지 설명 입력

뭐가 잘못 되었 니?


프로그래밍 방식으로 설정해보세요 ...
Shamsudheen TK

@Ramshad 안녕하세요, 저는 iOS 개발의 초보자입니다. 어떻게 할 수 있습니까?
rodrigoalvesvieira 2014 년


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를 편집하고 "Main storyboard file"값을 찾아야합니다. 기본 이름 (iPad)
  5. 다시 컴파일하고 머리카락을 당기지 마십시오.

3
개발자 기본 사항에 나열된 단계를 시도하는 동안 동일한 문제가 발생했습니다. 새 스토리 보드를 생성하고 새 스토리 보드를 초기 뷰 컨트롤러로 표시하고 프로젝트 배포 정보를 통해 새 스토리 보드를 메인 스토리 보드로 설정했습니다. 마술처럼 작동하기 시작했습니다. Xcode의 버그인지 확실하지 않습니다. developer.apple.com/library/ios/referencelibrary/GettingStarted/...
ioWint

이것은 작동하지 않았거나 초기 내비게이션 컨트롤러가 "is Inital View Controller"로 설정 될 때까지 작동하지 않을 것이라고 생각합니다.
Sumit Kumar Saha

나는 이것을 시도하려고했다. 그러나 나는 청소하고 다시 건축했고 그것은 작동했습니다
Skywalker

305

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

여기에 이미지 설명 입력


물론 이것이 '작동 방식'입니다. 그러나 나는 '버그'도 만났는데 이것은 작동하지 않습니다. 새로운 것을 만들고 모든 것을 복사했습니다! 나의 경우에는.
Tys 2014 년

하지만 그의 뷰 컨트롤러는 이미 초기 뷰 컨트롤러로 설정되어 있지 않습니까?
Iurii Vasylenko 2015-08-07

@YuraVasylenko : 이전이 아니었기 때문에 선택한 마크로 표시했습니다.
Ashvin Ajadiya

1
다만, 그것은 조금 더 그것을 필요로하는 사람들을 위해 상세하게 만들기 위해 스토리 보드에 대한 초기 컨트롤러 설정
세르게이 Basharov

40

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


1
이것은 내 문제였습니다. 스토리 보드에있는 기본 뷰 컨트롤러를 삭제했고 다른 컨트롤러를 추가 할 때이를 확인해야했습니다.
Orgmir

17

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

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

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


14

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

3
프로그래밍 방식으로 수행하는 경우 대상의 기본 인터페이스에서 스토리 보드를 제거해야합니다. 비워 두십시오. 또한 이것은 didFinishLaunchingWithOptions.
Jordan H

@JordanH 대상 메인 인터페이스에서 스토리 보드를 제거하는 방법은 무엇입니까?
PascalS

@Passe 텍스트를 선택하고 삭제를 누르십시오. 일반 탭에 있습니다
Jordan H

12

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

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

Attributes Inspector의 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 "TO : " XXX.storyboard "를 변경하면이 오류가 발생합니다 .

저에게 해결책은 다음과 같습니다.

  • 제품-> 청소
  • 변경 : 지원 파일 -> info.plist- > 메인 스토리 보드 파일베이스 이름 -> 메인 TO : XXX

행운을 빕니다



3

여기에 이미지 설명 입력

위의 정답 외에도 일반에서 올바른 메인 인터페이스를 설정했는지 확인하십시오.


3

첫 번째 옵션

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

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

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

온 보딩 은 스토리 보드 이름이됩니다.

info.plist 파일을 마우스 오른쪽 버튼으로 클릭하고 소스 코드로 열려면

두 번째 옵션

1- 프로젝트를 클릭하십시오

2- 대상 섹션에서 프로젝트를 선택하십시오.

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

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

스토리 보드 초기 뷰 컨트롤러 설정을 기억하십시오


1
<key> UISceneStoryboardFile </ key> 문제가 해결되었습니다. 감사.
bogdan

2

새로운 스토리 보드를 추가했다면 다음 사항을 확인해야합니다.

1) plist 파일에서 메인 스토리 보드 파일 기본 이름 (iPad) 또는 (iPhone)의 값이 스토리 보드 파일 이름과 일치해야합니다 ( 확장자 .storyboard를 추가하지 마십시오 ).

2) 스토리 보드에는 초기 뷰 컨트롤러 로 설정된 뷰 컨트롤러가 하나 있어야합니다.

3) 프로젝트를 정리하고 빌드하십시오. :)

여기에 이미지 설명 입력


1

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

깨진 버전과 작동하는 버전의 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. 보기라는 Xcode 메뉴 항목으로 이동하여 버전 편집기> 비교보기 표시를 선택합니다.
  5. 왼쪽에는 로컬 버전이, 오른쪽에는 과거 버전이 표시됩니다. 이 스토리 보드에 대한 커밋 목록을 보려면 기록 버전 아래의 날짜를 클릭하세요. 효과가있는 것을 선택하고 문서 요소를 비교하십시오 . * initialViewController 의 ID는 무엇입니까 ? 다른가요? 그렇다면 손으로 다시 편집하고 실행하십시오. xcode 히스토리 비교 도구 작동

1

AppDelegate에 window var가 있는지 확인하십시오.

var window: UIWindow? 

또한 Info.plist 파일의 스토리 보드를 확인하십시오.

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

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


1

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

Info.plist 파일을 수동으로 편집하고 스토리 보드 이름도 설정해야 UISceneStoryboardFile합니다.


1

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

메인이었던 LoginScreen을 변경해야했습니다.

여기에 이미지 설명 입력


놀랍게도 이것은 많은 표를 얻지 못했습니다. 이는 사실상 모든 SceneDelegate 구현에서 발생합니다 (스토리 보드를 초기 컨트롤러로 사용하지 않음).
bauerMusic
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.