[error]has no segue with identifier

2012. 11. 12. 13:49제2외국어/에러일지.

 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (<TestViewController: 0x1e5f1360>) has no segue with identifier 

Oh My God!!

Why this problem happened?
: 일반적으로 Segue 의 매칭이 안 된 경우 발생. ( 스토리보드에서 설정한 것과 코드로 가는 게 다를 경우 )
1. Segue 이름 확인
2. info.plist 에서 스토리보드 파일 이름 매칭 확인
3. 이전 데이터가 남아있을 경우 발생할 수도 있으니, 이전 컴파일 (시뮬레이터 or 디바이스 ) 앱을 삭제후 다시 확인
등등 해결책으로 올라온 답변.


화면전환과 관련하여 (performSegueWithIdentifier ) 함수를 사용하는 경우

1. ViewDidLoad 에서 사용할 경우. ( X )

: [Warning]whose view is not in the window hierarchy! 뷰가 만들어 지기 전에 이동할려고 하면 안된다.
-> 그 후 화면전환시 Error ( has no segue with identifier ... )


2. ViewDidAppear 에서 사용할 경우. ( X -> O )

: 바로 Error ( has no segue with identifier ... )
-- > 안 되는 줄 알았는데, 생각해보니 언젠가 사용한 경험이 있었음. 그래서 어느 부분에서 문제인지 파악!!

바로 Test 결과
:  그냥 Single View Application 으로 프로젝트 만들고 바로 Test 를 하면 (ViewController 에서)ViewDidAppear 에 사용하게 되면
    Error 발생.

Why? 왜 기본으로 만들어진 ViewController 에서는 되지 않을까??
아주 간단하게, 새롭게 ViewController을 만들어보면 차이를 알 수 있습니다.

바로 밑의 함수의 부제!! 기본 ViewController 에서는 밑의 함수가 존재하지 않습니다. 
그래서 자신이 누군지 모르기때문에, Segue를 못 찾기 떄문에 에러가 발생하는 것 같습니다.


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

{

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if (self) {

        // Custom initialization

    }

    return self;


< 해결책 >
1. 처음 만들어진 ViewController 을 시작 뷰 컨트롤( = Is Initial View Controller )로 사용하지만 않으면 됩니다.
2. 기본 ViewController 에 위 함수를 추가해주면 됩니다.


3. 그 외 부분에서 사용할 경우. ( O )

: 사용 가능.