(내가)자주 겪는 오류들: #this class is not key value coding-compliant for the key

minin·2021년 10월 11일
6

Xcode

목록 보기
2/8

this class is not key value coding-compliant for the key

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<SSAC_DrinkWater.DrinkWaterViewController 0x102805140> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key profileButton.'
terminating with uncaught exception of type NSException
(lldb)

this class is not key value coding-compliant for the key profileButton.

코드를 작성하던 중 이런 오류가 떠서 계속 실행이 안됐다.

빌드를 하면 아무 오류도 나지 않았고, 방금까지 실행한 것 같은데.. 코드는 똑같은데..? 하면서 찾아봤다.

해결 방법은 생각보다 간단!

먼저 이게 어떤 의미인지부터 알아보자면,

this class is not key value coding-compliant for the key profileButton.'

→ Xcode가 내가 코드에 연결시켜 놓은 profileButton을 찾을 수 없다.

//@IBOutlet var resetButton: UIBarButtonItem!
//@IBOutlet var profileButton: UIBarButtonItem!

나의 코드를 보면, 나는 처음에 버튼 두 개를 IBOutlet으로 연결해 놓고, 사용하지 않을 것 같아서 주석처리를 해놨다. 이건 사용안하겠다고 한거니까 상관없을 것 같아서 배제시켜놓고 애꿎은 코드만 계속 수정해봤다. 하지만 문제는 여기에,,

뷰를 선택하고 인스펙터를 보면 저렇게 오류가 떠 있는 것을 알 수 있다.

Xcode입장에서는 연결이 있었는데요? 없었습니다.. 하는 것 같았겠지,,

저 부분을 x 버튼 눌러 지워주면 오류는 해결된다.

📌Outlets 연결해 주었을 때, 코드 상에서 이름을 바꾸거나 연결을 해제해 주었을 때는 꼭! Connections Inspector에서도 변경사항을 반영해 주어야 한다.

...하지만 이렇게 쓰고도 나는 계속계속 같은 오류로 머리를 쳤다,,

🐾🐾 오늘 SSAC 수업을 듣던 중 선생님께서 연결 관계에 대해서 이야기를 해 주셨다!

@IBOutlet 들을 찬찬히 살펴 보면 모두 옵셔널을 강제 해제 하고 있는 것을 볼 수 있다.
! 를 사용하여 강제 해제를 하는 경우에는, 확실하게 그 값이 존재할 때 풀어주는 것이다.

그런데 만약 연결이 되어 있지 않는다면, 옵셔널 값이 nil인 상태에서 해제를 시키기 때문에 nil을 반환한다.

그래서 앱이 종료되는 등의 오류가 나는 것이다‼️

profile
🍫 iOS 🍫 Swift

1개의 댓글

comment-user-thumbnail
2023년 10월 24일

connect 나와있는 inspector를 못찾고 있었는데ㅜㅜ 진짜 감사합니다!!

답글 달기