Xcode :“진입 지점이 없어서 장면에 연결할 수 없습니다.”하지만 찾을 수 없습니다.


89

Xcode 4.5.2는 다음과 같은 경고를 표시합니다.

Unsupported Configuration    
Scene is unreachable due to lack of entry points and does not have an identifier 
for runtime access via -instantiateViewControllerWithIdentifier:.

불행히도 나는 유죄 판결을받은 장면을 식별 할 수 없습니다. 이슈 네비게이터에서 경고를 선택해도 스토리 보드에서 아무 것도 강조 표시되지 않습니다. 상당히 복잡한 스토리 보드 (30 개 이상의 장면)가 있습니다.

어떤 제안?

경고 스크린 샷

답변:


50

이 스레드는 오래되었지만 무엇이 저에게 효과가 있는지 설명하는 답변을 보지 못 했으므로 여기에 있습니다.

이 오류가 발생했고 스토리 보드를 시각적으로 살펴보면 모든 뷰 컨트롤러가 루트 뷰 컨트롤러에 연결된 것으로 나타났습니다.

@bobnoble의 답변에서와 같이 스토리 보드의 뷰 컨트롤러 17 개 모두에 이름을 지정했습니다. 뷰 컨트롤러의 긴 이름을 기반으로하는 명명 규칙을 사용했습니다 (예 : "Jobs View Controller"에 대해 "jvc"). 빌드하려고 할 때 뷰 컨트롤러 중 하나에 중복 된 이름이 있음을 가리키는 오류 메시지가 표시됩니다. 아래로 추적 해보니 뷰 컨트롤러 의 실제 복제본 이 트윈 위에 정확히 쌓인 것을 발견했습니다 . 완전히 취소하지 않은 사용자 인터페이스 실험에서 잘라내어 붙여 넣기로 인한 손상이라고 생각합니다.

어쨌든 연결되지 않은 쌍둥이를 삭제하면 문제가 해결되었습니다. 그 후 코드에서 참조되지 않는 모든 VC 이름을 제거했습니다.


3
이 역시 나에게 일어난,하지만 난 여전히 많은 빈의 한을 작성했다Storyboard ID
피에르 드 LESPINAY

... 그때 @bobnoble는 √ 표시 할 정답이라고 생각
SwiftArchitect

139

스토리 보드에서 각보기 컨트롤러 (아래 이미지의 빨간색 화살표)를 선택하고 스토리 보드 ID 필드 (빨간색 타원형)를 확인합니다. 스토리 보드 ID 필드는 비워 둘 수 없습니다. 당신이 하나를 찾으면 그것이 범인입니다.

여기에 이미지 설명 입력


6
안녕하세요 @bobnoble, 회신 해 주셔서 감사합니다. 한 가지 질문 : 왜 모든 장면에 스토리 보드 ID를 설정해야합니까? 필수라고 생각하지 않습니까? 프로그래밍 방식으로 장면에 액세스하려면 ID를 설정해야한다는 것을 알고 있지만 모든 장면이 segue를 통해 연결되면 어떻게됩니까? 아니면 그냥 좋은 프로그래밍 연습일까요?
Wolfy

@Wolfy-좋은 점, segue 또는 Storyboard ID가 있는지 확인하려면 각각을 살펴 봐야합니다.
bobnoble 2012

2
이 솔루션을 시도, 난 단지 충전 하나의 특정는 것을 깨달았다 Storyboard ID경고 제거
피에르 드 LESPINAY

나는 UINavigationController여러 개 UIViewControllers를 가지고 있었고 그들 중 하나를 식별자로 부르지 않더라도 그들 모두에 식별자를 설정해야했습니다. 아무도없는 버그를 찾고 정말 짜증나!
Alex Cio

나를 위해 작동합니다. 왜 이런 일이 발생하는지 아는 사람이 있습니까? 매우 발견 할 수없는 것 같습니다. 돌이켜 보면 주어진 오류는 빈약 한 단서를 제공합니다. 스토리 보드를 가장 최신의 최신 버전으로 변환 한 후 얻었습니다. 스토리 보드 ID가 지금 필요한 경우 확실히 이전이 아니었고 자동 변환으로 처리되지 않았습니다.
조쉬 Sutterfield

30

단순한 단일 장면 스토리 보드에서이 정확한 오류가 발생했습니다.이 문제를 해결하기 위해해야 ​​할 일은 스토리 보드의 1보기 컨트롤러에 대해 "Is Initial View Controller"확인란을 선택하는 것뿐이었습니다. 이 상황에서 Xcode가 기본적으로이 상자를 선택하는 데 사용 된 것으로 의심되지만 더 이상 그렇지 않습니다.

하단의 확인란을 선택하십시오.

                                     

스토리 보드의 뷰 컨트롤러 중 정확히 하나에 대한 확인란을 선택하면 괜찮을 것입니다.


1
감사. 그거였다!
Eric Chen

20

30 개를 모두 살펴보고 스토리 보드 ID 또는 해당 뷰 컨트롤러에 대한 segue가 있는지 확인해야합니다. 둘 중 하나가 필요하며 둘 다 옵션입니다.


5
모든 뷰 컨트롤러에 segue 또는 ID가있는 후에도 오류 메시지가 계속 표시 될 수 있습니다. 이 경우 제품을 청소하면 사라집니다.
Reinhard Männer

5
제 경우에는 오류를 수정 한 후 제품 청소만으로는 오류 메시지를 제거 할 수 없었습니다. Xcode를 다시 시작하면 사라졌습니다. (나는 프로젝트를 닫거나 다시 열지 않았습니다.
그것도

저도 마찬가지입니다. 결국 오류 메시지를 제거하려면 xcode를 중지하고 다시 시작해야합니다.
MusiGenesis

8

이 문제는 다음 시나리오 중 하나에서 발생할 수 있습니다.

사례 I : 스토리 보드에서 "isInitialViewController" 로 표시된 장면이없는 경우 .

수정 : 루트 뷰 컨트롤러를 식별하고 SB에서 "isInitialViewController" 로 표시합니다 . 이 경우 스토리 보드 ID는 필수가 아닙니다.

사례 II

스토리 보드에 initialViewController가 필요하지 않은 상황이있을 수 있습니다. 예 : 여러 스토리 보드를 사용하는 경우.

수정 : 이러한 경우 "스토리 보드 ID" 가 올바르게 지정 되었는지 확인 하고이 ID를 사용하여 스토리 보드에서 사용할 첫 번째 장면을 참조하십시오. 예 :

UIStoryboard *myStoryBoard = [UIStoryboard storyboardWithName:@"MyStoryBoardName" bundle:nil];
MyViewController *myViewController = (MyViewController *)[myStoryBoard instantiateViewControllerWithIdentifier:@"MyViewControllerId"];

이 경우 "스토리 보드 ID" 는 필수입니다.

사례 III

initialViewController가 연결되어 있습니다. 하지만 여전히이 경고를받습니다. 이는 스토리 보드의 일부 장면이 "segue" 와 연결 되지 않았을 수 있고 "storyboard id" 가 없기 때문 입니다. 스토리 보드를 스캔하여 "segue" 가 필요한지 확인하십시오. 그것이없는 경우 segue를 연결하십시오. segue가 필요하지 않은 경우 위의 예제 코드에 표시된 것처럼 코드에서 장면을 참조하는 유일한 방법이므로 "storyboard id" 를 제공해야합니다 .

도움이 되었기를 바랍니다


사례 III-도움이되었습니다. 감사!
mrGott 2015-06-30

샘플 프로젝트가 이전 xib 파일과 함께 제공된 경우가있었습니다. 스토리 보드를 만들었는데 현재 고통 스럽습니다. xib를 스토리 보드 형식으로 변환하고 거기에서 이동해야합니다. 응용 프로그램 장면이나 메뉴를 만드는 방법이 보이지 않습니다 ..
nyxee

6

Storyboard ID모든 장면에 대해 설정할 필요가 없습니다.UINavigationController

글쎄, 나는 약 50-60 개의 장면을 가지고 있으며 방금이 경고를 받았으므로 segue와 연결되지 않은 controller (Scene) 또는 NavigationController 만 설정해야 함을 알았습니다 Storyboard ID.

여기에 이미지 설명 입력

위 이미지에서 UINavigationControllersegue와 연결되어 있지 않은 것을 알 수 있습니다 . 그 경고의 원인입니다.

이 경고를 제거하려면 스토리 보드 ID를 제공하십시오.


5

나는 같은 문제가 있었다. 탐색 및 탭 막대 컨트롤러가있는 스토리 보드에 많은 뷰가 있습니다. 저에게는 일부 뷰가 연결되어 있지 않다는 것을 알려주는 경고였습니다. 모든 뷰가 어떤 방식 으로든 루트 뷰 컨트롤러에 연결되어 있는지 확인하십시오 . 이 경고를 제거하기 위해이 프로젝트를 처음부터 시작하고 뷰가 연결되지 않았을 때 동일한 경고를 발견했습니다.


이것은 나를 도왔습니다. 나는 7.1.1 Swift 2를 초과하여 사용하고 있습니다. 초기 StoryBoard는 루트 뷰 컨트롤러가되었습니다.
Lukesivi 2015

3

문제가되는 장면을 찾는 가장 간단한 방법 :

문제 탐색기 (왼쪽 패널, 검색 버튼 옆)로 이동하여 오류를 두 번 클릭합니다. 창 중앙에 문제가되는 장면이 포함 된 창이 나타납니다.

(이것은 실제로 일반적으로 사실입니다. 오류를 두 번 클릭하면 일반적으로 오류가 중앙에있는 팝업이 표시됩니다.

참고 : 때때로 XCode는 내비게이션 컨트롤러의 루트 뷰 컨트롤러 (즉, 초기 뷰 컨트롤러) 인 장면에 대해이 오류를 잘못 제공합니다. 간단한 수정은이 루트 뷰 컨트롤러에 Storyboard ID를 제공하고 컴파일 (오류가 사라져야 함) 한 다음 storyboardID를 제거 (더 이상 오류 없음)하는 것입니다.


"간단한 수정으로이 루트 뷰 컨트롤러에 스토리 보드 ID를 제공합니다"라는 힌트를 보내 주셔서 감사합니다. 그것은 내 문제를 해결했습니다. 음, UINavigationController에 '스토리 보드 ID'를 부여해야합니다.
Mohd Haider 2015 년

이것은 메인 메뉴가있는 애플리케이션 장면을 가리 킵니다. 스토리 보드 ID를 줄 수 없습니다.
Daniel

2

이 문제를 일으키는 컨트롤러 또는 장면을 확인하는 가장 쉬운 방법은 다음과 같습니다.

  • .storyboard프로젝트 네비게이터에서 Ctrl- 클릭 하고 Open As > Source Code. 그러면 Storyboard의 기본 XML이 나타납니다.
  • 이보기에서 경고는 문제가되는 장면과 관련된 XML의 줄과 명확하게 관련됩니다.

이제 제 경우에는 "불쾌한 장면"에 식별자와 segue가 있었기 때문에 경고가 특히 짜증났습니다! 장면을 삭제 한 다음 삭제를 취소하여 문제를 해결할 수있었습니다. 우아하지는 않지만 작동했습니다. 이 작업을 수행하기 전에 스토리 보드를 저장했습니다. 돌이켜 보면, 나는 사본을 만들고 diff그 전후를 만들었어야 했다.


2
이상하게도 이것은 일관되게 작동하지 않는 것 같습니다. 내 버그가있는 상황에서는 효과가있었습니다. 이제 테스트 중이며 Source Code보기에 오류가 표시되지 않습니다. 따라서 마일리지는 다를 수 있습니다.
Dmitry Minkovsky

나는 이것으로 View Controller를 찾지 못했지만 그것을 삭제했고 (XML에서, ID에서 작동하지 않음) 경고가 사라졌습니다.
Daniel

2

나에게 그것은 Storyboard ID또는 Segue. 을 설정하지 않았기 때문에이 경고를 받았습니다 View Controller's Custom Class.

선택 View Controller상의를 Storyboard한 다음에 Utilities Pane, 선택 Identity Inspector아이콘을. 아래 Custom Class에서 Class필드 내부의 값을 확인 합니다.

라고 표시되어 있으면 UIViewController클래스 이름을 입력해야합니다. 이것은 당신의 이름이됩니다 .h.m사용자 정의 구성 파일 UIViewController서브 클래스를.


나는 이것에 대한 변형을 가졌습니다. 내 스토리 보드의 잘못된 ViewController를 ViewController 클래스에 일치 시켰고 스토리 보드 ID와 동일했습니다.
Vince O'Sullivan

2

오늘이 질문에 왔습니다. 저는 Xcode 6.3을 사용하고 있으며 OP의 질문에 대한 대답은 이제 매우 간단합니다.

첫 번째로 사용하려는 View Controller를 선택하고 Attributes Inspector를 표시 한 다음 View Controller 섹션에서

초기보기 컨트롤러

확인됩니다. Voilà!


2

Xcode 7을 사용하면 쉽게 처리 할 수 ​​있습니다. 문제가있는 장면을 찾기 위해 모든 장면을 수동으로 살펴볼 필요가 없습니다. 먼저 알려진 문제에 대한 자세한 정보를 얻을 수 있는 보고서 탐색기 로 이동 합니다. 문제 설명은 다음과 같습니다.

Base.lproj / Main.storyboard : fPh-fe-F5F : 경고 : 진입 점이 부족하여 장면에 연결할 수 없으며 -instantiateViewControllerWithIdentifier :를 통한 런타임 액세스에 대한 식별자가 없습니다.

이 정보를 사용하여 객체 ID (이 경우 fPh-fe-F5F )를 복사 하고이 문자열의 발생을위한 작업 공간을 검색 할 수 있습니다. Main.storyboard 파일에서 문자열을 찾을 수 있습니다. 검색 결과를 더블 클릭하면 선택한 장면이있는 Main.storyboard가 열립니다. 문제가있는 장면을 알게되면 스토리 보드 ID를 설정하거나 "Is Initial View Controller"를 설정하여 문제를 쉽게 해결할 수 있습니다.


1

식별자 만 설정할 수 있습니다. 오른쪽 창의 속성 검사기에서 "Identifier"라는 필드를 찾을 수 있습니다. 거기에 아무 문자열이나 넣으면 작동합니다.

내비게이션 컨트롤러를 클릭하고 속성 인스펙터 아래에서 "is initial view controller"버튼을 클릭하면 이것도 작동합니다.


1
Mohammad, 답장 해주셔서 감사하지만 문제는 : 어떤 장면에서 식별자를 설정해야합니까? 경고의 원인이되는 장면을 찾을 수 없습니다. 이것이 주요 문제입니다.
Wolfy

1

나는 같은 문제에 직면했고 모든 viewController 및 NavigationController에 대한 모든 식별자를 스토리 보드 ID에 넣어 해결했습니다. 오류는 즉시 제거됩니다.

즐겨!!!


0

아마도이 XQuery는 그런 불쾌한 장면을 찾는 데 도움이 될 것입니다.

for $i in .//scene/objects/*[1][not(@storyboardIdentifier) or @storyboardIdentifier= '']/@id      (: find every scene that has an empty storyboardIdentifier :)
where count(.//segue[@destination= $i])= 0 and $i!= ./document/@initialViewController             (: filter the results to the scenes that are not destinations of a segue and exclude the initialViewController :) 
return ($i, $i/../@customClass)                                                                   (: return the storyboard-id and the customClass, if any :)

xqilla가 설치되어있는 경우 쿼리를 파일에 저장하고 다음과 같이 사용합니다.

xqilla <xqueryfile> -i <path to your storyboard>

0

이것이 아직 언급되지 않았는지 여부는 모르겠지만이 경고를받을 수있는 또 다른 이유는 잘못된 방향으로가는 segue가있는 경우입니다. 예를 들어, 내 프로젝트에서이 경고를 받았지만 모든 컨트롤러가 실제로 연결되었습니다. 그러나 그들 중 하나는 기본적으로 아이를 제시하는 부모 대신 아이로부터 부모를 제시하려고하는 segue를 가지고있었습니다. 이로 인해 동일한 경고가 발생했습니다.


0

스토리 보드에 아무것도 설정되지 않은 UIViewController가있을 때이 경고가 표시됩니다. 스토리 보드 ID를 설정하여이 경고를 피했습니다.


0

나는 같은 문제가 있었지만 컨테이너 뷰를 사용하고 있다는 것을 깨달았고 기본 뷰 컨트롤러를 삭제하는 대신 segue를 삭제했습니다. 그래서 뷰 ​​컨트롤러는 스토리 보드에 남아 있었고 경고도 마찬가지였습니다. 따라서 컨테이너 뷰의 기본 뷰 컨트롤러가 필요 없을 때 제대로 삭제되지 않으면 경고가 나오는 경우 중 하나입니다.


0

나는 위에서 설명한 모든 것을 아무 소용이 없었습니다. IB에서 모든 것이 제대로 연결되었습니다.UIViewController 는 루트 뷰 컨트롤러로 지정되었습니다. 식별자가 없었지만 모든 컨트롤러에 추가했습니다.

경고가 사라질 수있는 유일한 방법은 위의 모든 작업 (컴퓨터 재부팅 및 클린 빌드 포함)을 수행 한 다음 git에서 내 프로젝트의 오류없는 분기 전환하고 다시 돌아 오는 것입니다.

어떤 조치가 문제를 해결했는지 또는 어떤 조치의 조합인지 확실하지 않지만 자체적으로 깨끗한 빌드는 아닙니다. 이것은 Main.storyboard가 단순히 열리면 항상 변경되는 부산물 일 수 있습니다. 즉, git commit -m "Stupid storyboard"원하는 것보다 더 자주 해야 함을 의미 합니다.


0

나를 위해 일한 것은 다음과 같습니다.

  1. 텍스트 편집기에서 스토리 보드를 엽니 다.
  2. 3.0에서 2.0으로 버전을 변경하고 저장하고 닫습니다.
  3. Visual Studio에서 다시 엽니 다. 문서가 자동으로 변환되어 열립니다.


0

모든 MVC에 스토리 보드 ID를 제공하는 것만으로도 효과가있었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.