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
을 반환한다.
그래서 앱이 종료되는 등의 오류가 나는 것이다‼️
connect 나와있는 inspector를 못찾고 있었는데ㅜㅜ 진짜 감사합니다!!