스토리 보드에는 식별자가있는 뷰 컨트롤러가 없습니다


175

다음과 같은 오류가 계속 발생합니다.

Storyboard (<UIStoryboard: 0x7ebdd20>) doesn't contain a view controller with identifier 'drivingDetails'

이것은 코드입니다.

- (void)tableView:(UITableView *)tableView 
        didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

   UIViewController *controller =  [self.storyboard instantiateViewControllerWithIdentifier:@"drivingDetails"];
   controller.title = [[dao libraryItemAtIndex:indexPath.row] valueForKey:@"name"];
   [self.navigationController pushViewController:controller animated:YES];
}

난 이미 설정 한 identifierUIStoryboard하지만, 난 여전히이 오류를 받고 있어요.

여기에 이미지 설명을 입력하십시오



4
뷰 컨트롤러가 아닌 segue의 식별자를 설정 한 것 같습니다. 그 그림에서 어떤 뷰 컨트롤러를 제시하려고합니까? 왜 당신은 왜 segue를 사용하지 않습니까?
Firoze Lafeer

운전 뷰 컨트롤러까지 잘 작동합니다 .... TableViewController를 제시하려고 할 때보 다 오류가 발생합니다 ... 어떻게해야합니까?
Mat

스토리 보드로 이동하여 해당 스토리 보드 ID를 제거한 다음 다시 추가하십시오. 때로는 빌드 폴더와 파생 데이터를 정리해야합니다
onmyway133

답변:


244

나중에 참조하기 위해 :

스토리 보드를 사용하여 iOS 6에서 개발 중입니다.

동일한 문제가 발생했지만 검사기에서 "식별자"필드를 찾을 수 없습니다. 대신 "Storyboard ID"라는 필드를 식별자 이름으로 설정하십시오. 이 필드는 인스펙터의 "ID 관리자 표시"탭에서 찾을 수 있습니다.

[참고-아래 주석은 일부 사람들이 관리자의 스토리 보드 ID 바로 아래에 "복원 ID"필드를 설정해야한다는 것을 발견했습니다. "스토리 보드 ID 사용"을 클릭하는 것만으로는 충분하지 않습니다.]

참조를 위해 아래 이미지가 있습니다. (이 경우 식별자를 클래스와 동일하게 지정했습니다) 여기에 이미지 설명을 입력하십시오


24
XCode 4.4 이전 버전 : 식별자; XCode 4.5 : 스토리 보드 ID
ilmiacs

정보 주셔서 감사합니다. Google의 설명에 따라 스토리 보드에서 식별자를 찾는 데 어려움을 겪었지만 Xcode4.6에서 식별자를 찾을 수 없습니다. 이것은 초보자에게 큰 문제입니다. 감사.
초보자

4
나를 위해 일한 것은 ReuseIndentifier를 사용하는 것이 었습니다. 스토리 보드 ID는 여전히 널 포인터 예외를 발생시킵니다.
드로이드 크리스

여기 동일한 사례 @DroidChris
Ahmed

5
"스토리 보드 ID 사용"을 확인하여 나를 행복하게
하셨습니다

189

에서 엑스 코드 7-11 ,

스토리 보드 ID를 변경하고 이와 같은 오류가 발생하면

단지 CLEAN 프로젝트 ( CMD+ SHIFT+ K)


13
왜 항상이 작업을 잊어 버리나요? 가장 미친 문제를 해결합니다. 상기시켜 주셔서 감사합니다, 테드!
AlphaCodaSeven

2
이 문제는 스토리 보드의 VC에 식별자가 할당 된 저장소에서 가져올 때 XCode 7.2에서 발생했습니다. 프로젝트를 청소하면 문제가 해결 된 것 같습니다.
Ed George

2
나는 내 마음을 잃고 있다고 생각했다 ... 간단한 segue가 작동하지 않았다.
dokun1

2
예 작동합니다 !!!! xcode 프로젝트를 청소하면 프로젝트에 대한 원치 않는 참조가 제거됩니다.
kiran

3
Android Studio 및 Android 개발에서 왔습니다. 이것은 XCode와 Swift에서 얼마나 많은 핵을 사용해야하는지 미쳤습니다. 나는 정말로 울어야한다. 진심으로.
ktamas

43

결정된! 내 경우 DrivingDetails의 경우 segue의 식별자뿐만 아니라 tableViewController의 식별자도 DrivingDetails로 설정해야합니다 ... 사진을 확인하십시오.

여기에 이미지 설명을 입력하십시오

또한 내비게이션 뷰 컨트롤러를 제거하여 이제 2 개의 테이블 뷰 컨트롤러가 "푸시"애니메이션과 직접 연결되었습니다.

***** XCODE 7.0 편집 *****

storyboardId를 설정해야합니다 (이 경우 viewController가 Navigation 컨트롤러에 임베드 됨).

let lastMinVc  = mainStoryBoard.instantiateViewControllerWithIdentifier("lastMinuteNavController") as! UINavigationController

여기에 이미지 설명을 입력하십시오


2
이 질문과 비슷한 문제가 발생하지만 속성 관리자로 이동하면 스크린 샷과 같은 2 개의 필드는 제목 필드, 식별자 필드는 표시되지 않습니다.
Anon957

위의 답변을 보셨습니까? 더 업데이트 된 것 같습니다. 감사합니다
Mat

1
segue의 식별자는 이와 관련이 없습니다. 스토리 보드에는 뷰 컨트롤러의 스토리 보드 ID 만 설정하면됩니다.
Jawwad

아마도 관련이 있습니다. iOS7에서는 [storyboard instantiateViewControllerWithIdentifier]뷰 컨트롤러 내부의 Interface Builder에서 뷰를 인스턴스화하지 않습니다. 그러나 iOS6에서는
William Entriken

30
let storyboard = UIStoryboard(name: "StoryboardFileName", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "StoryboardID")
self.present(controller, animated: true, completion: nil)

노트 :

  • "StoryboardFileName"스토리 보드 의 파일 이름 이며 스토리 보드 의 ID가 아닙니다 !
  • "StoryboardID"당신이 가지고있는 ID입니다 수동으로 그 스토리 보드에 대한 신원 관리자에서 설정 (아래 스크린 샷 참조).

스토리 보드 ID

때로는 사람들이 첫 번째는 스토리 보드 ID이고 두 번째는 View Controller 클래스 이름이라고 생각하므로 차이점에 유의하십시오.


1
이!! 내 남자는 방금 내 18 시간의 미스터리를 해결했다. 간결한 설명에 감사드립니다.
mrfevrier

1
예수 그리스도! 감사합니다! .instantiateViewController(withIdentifier: "StoryboardID")로 변경해야한다 .instantiateStoryboard(withIdentifier: "StoryboardID")또는 간단하게 뭔가UIStoryboard(name: "StoryboardFileName", bundle: nil).init()
루즈 벨트

16

Identity Inspector 탭에 Xcode 6.3.2의 Storyboard ID라는 이름이 있고 Use Storyboard ID 옵션이 선택되어 있습니다. 여기에 이미지 설명을 입력하십시오


이것은 문제가되었으므로 문제가있는 두 곳에서 모두 효과가있었습니다. 스토리 보드 ID 값만 설정하는 것이 아니라 '스토리 보드 ID 사용' 확인 해야합니다
Tyler Hack

"스토리 보드 ID 사용"은 저에게 없어진 중요한 부분이었습니다. 감사합니다.
Marcy

9

스토리 보드에 새 VC를 추가 한 후 시뮬레이터가 아닌 장치에서만이 문제가 발생했습니다. 여러 스토리 보드 현지화가 있었기 때문에 VC가 기본 스토리 보드에만 추가되었습니다. 다른 현지화 (이 중 하나는 내 iPhone에서 사용)를 제거하려고 시도했지만 여전히 오류가 발생했습니다. 결국 나는 다른 언어 버전 재현했다 그들 각각의 새로운 VC합니다.


5

컴파일러는 다음과 같은 오류를 보여줍니다.

Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: 'Storyboard (<UIStoryboard: 0x7fedf2d5c9a0>) doesn't contain a 
ViewController with identifier 'SBAddEmployeeVC''

여기서 생성 된 스토리 보드의 객체는 ViewController를 포함하는 메인 스토리 보드가 아닙니다. 으로 스토리 보드 파일에 있는 우리의 작업으로 이름 Main.storyboard . 따라서 Main.storyboard 의 객체에 대한 참조가 필요합니다 .

다음 코드를 사용하십시오.

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];

다음 storyboardWithName은 작업중인 스토리 보드 파일의 이름이며 스토리 보드가 bundle있는 번들을 지정합니다 (예 :) mainBundle.


5

@Ravi Bhanushali와 동일한 문제를 가진 사람들을 위해 Swift 4 솔루션이 있습니다.

let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)


@Ravi의 답변에 의견을 추가해야합니다.
Sunil

나는 평판을 얻지 못했을 것입니다. 충분한 평판을 가진 사람은 그렇게하는 것을 환영합니다.
confitz20

4

나는 그것을 발견했다 ... 스토리 보드에서보기 컨트롤러를 클릭하고 vc 속성 관리자에서 왼쪽에서 세 번째 아이콘을 클릭하십시오-scereen에서 통화 이름을 설정 한 아이콘은 '신분'이라고 표시됩니다. identity라는 단어를 클릭하면 storyboardID가 표시됩니다-코드에서 식별자를 추가하십시오.


4

신원 관리자 (왼쪽의 세 번째 아이콘)에서 "스토리 보드 ID"를 수정하면 작동합니다.

그렇지 않은 경우 오타가없는 경우 프로젝트를 정리 ( "제품"-> "청소"또는 간단히 명령 + shift + K)하십시오.


내 생명을 구했습니다. 감사. (특히 청소에 관한 부분)
Jay

1

식별자를 입력하는 동안 적절한 뷰 컨트롤러를 선택하지 않은 상태에서 절차를 한 번 더 반복하면 한 번만 확인하십시오.


어떤 뷰 컨트롤러를 선택해야합니까? 죄송합니다. 혼란 스럽습니다.
Mat

TableViewController * controller = [self.storyboard instantiateViewControllerWithIdentifier : @ "drivingDetails"]; controller.title = [[dao libraryItemAtIndex : indexPath.row] valueForKey : @ "name"]; [self.navigationController pushViewController : 컨트롤러 애니메이션 : YES]; 이처럼?
Mat

이미지에 따라 해당 컨트롤러에 세부 정보를 표시하기 위해 TableViewController를 선택해야합니다.
iamsult


1
segue 식별자와 뷰 컨트롤러 식별자가 다르다는 점에 유의하십시오. 둘 다 동일한 이름을 사용하고 있기 때문에 혼란 스러울 수 있음을 강조하고 싶었습니다. segue 식별자는 PreparingForSegue에서 사용되어야하고 뷰 컨트롤러 식별자는 스토리 보드에서 직접 뷰를로드하기위한 것입니다. scott-sherwood.com/?p=219
Scott Sherwood

1

내 뷰 컨트롤러 중 일부에 스토리 보드 가 없습니다. 속성 .

전에:

<viewController
    id="pka-il-u5E"
    customClass="YourViewControllerName"
    customModule="ModuleName"
    customModuleProvider="target"
    sceneMemberID="viewController">

후:

<viewController
    storyboardIdentifier="YourViewControllerName"   <----
    id="pka-il-u5E"
    customClass="YourViewControllerName"
    customModule="ModuleName"
    customModuleProvider="target"
    sceneMemberID="viewController">

0

동일한 오류가 발생하여 프로젝트에서 다음 변경 사항을 변경하여이 문제를 해결할 수 있습니다. 관리자 패널에서 클래스 이름을 언급 한 후 문제가 해결되었습니다. 이동-> 오른쪽 패널 Identity Inspector 사용자 정의 클래스 섹션에서

클래스 : 클래스 이름 (ViewController)

ID 섹션 스토리 보드 ID : 스토리 보드 ID (viewController 이름)

스토리 보드 ID 사용 옵션을 클릭하면 문제가 해결 된 것입니다. 나는 그것이 당신을 도울 것입니다 ....


0

스토리 보드 ID로 식별자 (@ "drivingDetails")를 사용하십시오.


0

메인 스토리 보드에서 각각의 뷰 컨트롤러를 선택하고 스토리 보드 ID가 현재 이름을 부여하고 사용하는 식별자로 사용되는지 확인하십시오.

여기 내 firstone은 storyboardID let vc = self.storyboard? .instantiateViewController (withIdentifier : "firstone")입니다! tabBarViewController


0

위의 모든 해결책을 시도했지만 아무도 효과가 없었습니다.

내가 한 일은 :

  • 프로젝트 청소
  • 파생 데이터 삭제
  • Xcode 재시작
  • 이전 답변 (IB 내부)에 표시된 StoryboardID를 다시 입력하십시오.

그리고는 효과가있었습니다. 충격적인 것은 인터페이스 빌더에서 Storyboar ID를 입력했으며 Xcode를 다시 연 후에 제거 / 삭제되었다는 것입니다.

이것이 누군가를 돕기를 바랍니다.


0

모든 것을 청소하고 Xcode를 닫아도 문제가 해결되지 않았습니다.

viewController를 삭제하고 새로운 식별자로 새로운 것을 만들어야했습니다.


0

참고 : 프로젝트에서 cocoapod를 사용하는 경우 먼저 실행 pod deintegrate하고rm Podfile.lock

그런 다음 VSCode 와 같은 타사 코드 편집기에서 프로젝트 폴더를 열고 오류를 발생시키는 ViewController 이름을 전체적으로 검색하십시오.

  1. 찾은 잘못된 이름을 바꾸거나 수정하십시오.
  2. 모든 변경 사항을 저장하십시오.
  3. 프로젝트를 정리하고 빌드하십시오.

이제 모든 것이 잘 작동합니다.

Xcode 내에서 파일 이름을 바꿀 때 가장 자주 발생합니다.


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