seong_hye, the developer

오류 해결 ) 'Receiver (< >) has no segue with identifier '' 오류 해결 본문

IOS/Error

오류 해결 ) 'Receiver (< >) has no segue with identifier '' 오류 해결

seong_hye 2022. 10. 18.

 

❗️ "Receiver (< >) has no segue with identifier" error 해결 ❗️

이 오류는 스토리보드에서 특정 identifier를 가진 segue가 존재하지 않는데

코드에서 해당 segue를 호출하려 할 때 발생하게 된다는 걸 알게 되었다.

 

이 문제를 해결하기 위해 해본 활동을 정리해보려 한다


✅ 해결 방안

➡️ 1. 스토리보드 segue의 Identifier 확인

- 스토리보드에서 문제되는 ViewController를 선택

- segue 연결선을 클릭

- 오른쪽 Attributes Inspector에서 Identifier 확인

 - 코드에서 사용하는 식별자와 정확하게 일치해야 함 (대소문자 구분!)

 

➡️ 2. segue가 실제로 연결되어 있는지 확인

- Ctrl + 드래그 또는 Interface Builder에서 segue 연결했는지 확인

- 연결이 끊어졌다면 다시 연결 필요


➡️ 3. segue가 현재 ViewController에서 정의된 것인지 확인

- performSegue(withIdentifier:)는 호출하는 뷰 컨트롤러에서 정의된 segue만 사용할 수 있음

- 다른 VC에서 정의된 segue는 호출 불가

 

➡️ 4. segue 이름 오타 주의

performSegue(withIdentifier: "goDetailView", sender: self) // X -> identifier 틀림

performSegue(withIdentifier: "goDetailVC", sender: self) // O

 ~> 나의 문제였음 ( 이왕이면 storyboard에서 Identifier를 복붙하는 게 더 안전함 )


✅ 오류 원인 정리

❌ performSegue(withIdentifier:) 에서 지정한 식별자와 실제 segue ID가 일치하지 않음

❌ 해당 segue 자체가 연결되지 않았거나 삭제됨

❌ identifier 오타

❌ 코드에서 segue 호출 시점에 뷰가 아직 준비되지 않음


✅ segue에서 바꾼 방법

let vc = storyboard?.instantiateViewController(withIdentifier: "DetailVC") as! DetailViewController
navigationController?.pushViewController(vc, animated: true)

segue가 아닌 view를 push해서 받는 방식으로 수정

~> 데이터도 View에서 해결하는 것이 아닌 다른 Model에서 받아와서 보여질 수 있도록 수정

 


Comments