[UIKit] 마주한 첫 번째 에러 (this class is not key value coding-compliant for the key)

2024. 1. 18. 01:38·📱 iOS/UIKit

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

...

"libc++abi: terminating due to uncaught exception of type NSException"

 

TextField, Label, Button 컴포넌트밖에 사용하지 않았는데,

ViewController 코드 상에 문제가 없는데 컴파일하면 에러가 발생한다.

 

결론부터 말하자면 Swift파일의 @IBOutlet || @IBAction의 연결이 끊여졌을 때 발생하는 런타임 에러이다.

 

상황

1. 스토리보드 view에 Label과 TextFild, Button을 배치함
'view.backgroundColor = .purple'은 시뮬레이션에 잘 연동됐는지 디버깅 용

2. 스토리보드의 버튼을 "컨트롤 + 좌클릭"으로 코드상에 끌어두어 '@IBOutlet weak var myButton: UIButton!'으로 선언함

3. ** 내가 임의로 버튼의 이름을 바꿈 ** 여기서 문제 발생

스토리보드에서 오브젝트를 끌어와 코드에 넣으면 변수 네임을 정하라 뜨고, 이후 작성 시 자동으로 변수 선언을 해줌

그와 동시에 view에서 'Referencing Outlets'에 내가 정한 변수 명과 뷰컨트롤러 클래스 명이 뜸

자동으로 연결을 해준다 이거임

근데 내가 임의로 코드에서 변수 명을 바꿈 -> 위 에러 발생

 

SwiftUI과 UIKit을 동시에 배우는 나는 둘의 큰 차이점이 struct와 class 구조라 생각했다.

class는 참조 타입으로 ARC에 의해 참조 카운팅이 되고 디폴트가 강한 참조임

근데 class로 만들어진 UIKit은 스토리보드에서 코드에 끌어다 놓을 시 'weak'로 약한 참조 변수 선언됨

그래서 인스펙터 창 보면 Outlets으로 myButton 객체가 생성돼서 참조되고 있다고 뜨는데

코드에서 바꾼다고 스토리보드의 내용들이 바뀌지 않음

-> 여기서 충돌 발생

또 다른 상황

지금이야 변수명이 문제라 바로 에러가 뜨지만,

버튼 리스너의 메소드 명을 변경한다면 ?

1. 버튼의 Action을 'didButtonListner' 메소드 명으로 추가
실행 잘 되고, 버튼 누르면 디버깅 잘 됨

2. 메소드 명 변경

지금 메소드명이 서로 다른데 컴파일이 잘 돼서 빌드까지 됐음

문제는 이러면 안되는데 된다는 거임

3. 버튼을 누름

-> 에러 발생, 런타임에 에러 발생함

 

 

이러한 오류는 class로 구현되어 있어서 그렇다고 생각했고,

오류가 발생하지 않게 구현을 잘 해야겠다고 느낌

저작자표시

'📱 iOS > UIKit' 카테고리의 다른 글

[UIKit] UIButton 타입과 메소드  (0) 2024.08.21
[UIKit] UISegmentedControl 사용해보기  (0) 2024.06.17
iOS 네트워크 통신 (1/3) - 개요 (URLSession, Alamofire, Moya)  (0) 2024.05.12
[프로토콜] UITextFieldDelegate 공식문서 뜯어보기  (1) 2024.04.12
[UIKit] Interface Builder Outlet 연결 Strong || Weak  (0) 2024.01.24
'📱 iOS/UIKit' 카테고리의 다른 글
  • [UIKit] UISegmentedControl 사용해보기
  • iOS 네트워크 통신 (1/3) - 개요 (URLSession, Alamofire, Moya)
  • [프로토콜] UITextFieldDelegate 공식문서 뜯어보기
  • [UIKit] Interface Builder Outlet 연결 Strong || Weak
kyxxn
kyxxn
컴퓨터공학을 좋아하는 대학생의 공부 일기
  • kyxxn
    컴공 학부생의 공부 일기
    kyxxn
  • 전체
    오늘
    어제
    • 분류 전체보기 (156)
      • 📱 iOS (64)
        • Xcode (10)
        • Swift (17)
        • Swift Concurrency (12)
        • UIKit (21)
        • SwiftUI (0)
      • 🖥️ Computer Science (57)
        • 🏛️ Software Architecture Pa.. (2)
        • 👨🏻‍🎨 Design Pattern (3)
        • Data Structure (4)
        • Algorithm (10)
        • Computer Architecture (4)
        • Operating System (19)
        • Network (15)
      • ✍🏻 회고록 (9)
      • 🎸 기타 (25)
        • 해커톤 (1)
        • git (6)
        • 세미나 (1)
        • 책을 읽고 (1)
        • AOS, Kotlin (6)
        • Reinforcement Learning (9)
  • 블로그 메뉴

    • 링크

      • 깃허브
      • 일상 블로그
    • 공지사항

    • 인기 글

    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    kyxxn
    [UIKit] 마주한 첫 번째 에러 (this class is not key value coding-compliant for the key)
    상단으로

    티스토리툴바