[ios] Xcode- ‘NSUnknownKeyException’을 수정하는 방법, 이유 :…이 클래스는 키 X에 대한 키 값 코딩 호환이 아닙니까? “

나는 연결하기 위해 노력하고있어 UILabelIBOutlet내 수업에서 만들었습니다.

내 응용 프로그램이 다음 오류와 함께 충돌합니다.

이것은 무엇을 의미 하는가?

어떻게 고칠 수 있습니까?

*** catch되지 않은 예외 ‘NSUnknownKeyException’으로 인해 앱을 종료하는 이유 : ‘[<UIViewController 0x6e36ae0> setValue : forUndefinedKey :] :이 클래스는 키 XXX에 대해 키 값 코딩 호환이 아닙니다.’



답변

xib에서 뷰 컨트롤러의 클래스가 잘못되었을 수 있습니다.

프로젝트를 다운로드했습니다.

당신이 얻는 오류는

‘NSUnknownKeyException’, 이유 : ‘[<UIViewController 0x3927310> setValue : forUndefinedKey :] :이 클래스는 키 문자열에 대한 키 값 코딩 호환이 아닙니다.’

Second뷰 컨트롤러 MainWindow.xibUIViewController대신SecondView 클래스를 가지고 있기 때문에 발생합니다 . 올바른 클래스로 변경하면 문제가 해결됩니다.

그건 그렇고, Objective-C에서 “string”과 같은 이름을 갖는 것은 좋지 않습니다. 런타임 이름 충돌을 초대합니다. 실습용 앱에서도 한 번 피하십시오. 이름 충돌은 추적하기가 매우 어려우므로 시간을 낭비하고 싶지 않습니다.

이 오류의 또 다른 이유는 한 컨트롤러에서 다른 컨트롤러로 요소를 복사하여 붙여 넣을 때 Xcode는이 요소를 새 컨트롤러로 편집하고 다시 연결 한 후에도 원래 컨트롤러에 대한 링크를 유지합니다.

이 오류의 또 다른 이유는 다음과 같습니다.

나쁜 콘센트.

당신도 한 제거 하거나 이름을 바꿀 당신의 출구 이름 .h파일을.

파일 .xib또는 .storyboard연결 관리자 에서 제거하십시오 .

하나 더 가능한 이유

(내 경우에는) 바인딩 가능한 속성을 가진 UIView 확장 및 바인딩 가능한 속성 (예 : 그림자, 모서리 반경 등)에 대한 설정 값을 UIView 확장에서 제거하십시오 (어떤 이유로 든).하지만 다음 <userDefinedRuntimeAttributes>은 xml에 남아 있습니다 ( foo.storyboard).

<userDefinedRuntimeAttributes>
  <userDefinedRuntimeAttribute type="color" keyPath="shadowColor">
      <color key="value" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
  </userDefinedRuntimeAttribute>
  <userDefinedRuntimeAttribute type="number" keyPath="shadowOpacity">
      <real key="value" value="50"/>
  </userDefinedRuntimeAttribute>
  <userDefinedRuntimeAttribute type="point" keyPath="shadowOffset">
      <point key="value" x="5" y="5"/>
  </userDefinedRuntimeAttribute>
  <userDefinedRuntimeAttribute type="number" keyPath="shadowRadius">
      <real key="value" value="16"/>
  </userDefinedRuntimeAttribute>
  <userDefinedRuntimeAttribute type="number" keyPath="borderWidthValue">
      <real key="value" value="0.0"/>
  </userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>

솔루션 : 마우스 오른쪽 버튼으로 클릭 foo.storyboard> 소스 코드로 열기> keyPath로 검색 (예 : shadowRadius)> </userDefinedRuntimeAttributes>문제를 일으킨 원인 삭제


답변

xib에 연결이 잘못되었을 수 있습니다.

이 오류가 여러 번 발생했습니다. 이 경우 TechZen의 답변이 절대적으로 맞지만 다른 일반적인 원인은 .h / .m에서 IBOutlet 속성의 이름을 이미 펜촉의 File ‘s Owner에 연결 한 경우입니다.

펜촉에서 :

  1. IB에서 객체를 선택하고 ‘Connections Inspector’로 이동하십시오.
  2. ‘Referencing Outlets’에서 객체가 여전히 이전 속성 이름에 연결되어 있지 않은지 확인하십시오. 만약 존재한다면 작은 ‘x’를 클릭하여 참조를 삭제하고 다시 빌드하십시오.

    여기에 이미지 설명을 입력하십시오

스토리 보드를 사용하는 경우 또 다른 일반적인 원인은 UIButton에 둘 이상의 할당이있을 수 있습니다 (솔루션은 펜촉과 거의 동일 함).

  1. 스토리 보드를 열고 UIButton을 마우스 오른쪽 버튼으로 클릭하십시오.
  2. 이 버튼에 할당 / 참조가 둘 이상 있음을 알 수 있습니다. 작은 “x”가있는 “주요 …”회색 창 중 하나를 제거하십시오.

    예 2


답변

이 오류를 없애기 위해 시뮬레이터 / iPhone에서 앱을 삭제해야했습니다.


답변

테이블에 대한 사용자 정의 ViewCell을 구현하려고 할 때이 오류가 발생했습니다. XIB에 대한 View 컨트롤러를 강조 표시하고 CellView의 요소에 연결하면 “이 클래스는 키에 대해 키 값 코딩 호환이 아닙니다”라는 오류가 발생하면 오류를 제거했습니다.

아래 이미지에서 연결을 삭제하십시오.
파일 소유자가 강조 표시되면 인스펙터에서 연결 삭제

테이블 뷰 셀에만 연결되어 있는지 확인하십시오. 테이블보기 셀과 INSPECTOR에서 클릭을 확인하려면 연결을 찾으십시오.

테이블 뷰 셀이 강조 표시되면 연결이 여기에 있어야합니다.


답변

때때로 이것은 “Inherit From Target”과 관련이 있습니다. 그 값을 설정해야합니다. 단일 대상 앱을 사용하면 대상에서 상속을 선택할 수 있습니다. 하나 이상의 대상이있는 경우 원하는 대상을 선택하십시오.

여기에 이미지 설명을 입력하십시오


답변

범용 앱이 아닌 iPhone 전용 앱인 경우 다음 필드가 비어 있는지 확인하십시오.

대상> 요약> iPhone / iPod 배포 정보> 기본 인터페이스

xib를 지정하면 충돌이 발생합니다.


답변

이 오류는 이미 연결된 Interface Builder 객체가 소유자의 소스 (파일 소유자)에서 제거 / 이름 변경 되었음을 나타냅니다 .

느낌표가 표시 되면 Interface Builder에서 파일 소유자 를 Control- 클릭하십시오 .

아래 그림에서 “aRemovedView”의 오른쪽에 느낌표가 있음을 알 수 있습니다. 이는 IB에 이미 연결된 상태에서 IBOutlet보기 객체를 제거했기 때문입니다.

여기에 이미지 설명을 입력하십시오

잡히지 않는 예외 ‘NSUnknownKeyException’으로 인해 응용 프로그램을 종료하는 이유 는 다음과 같습니다
. ‘[setValue : forUndefinedKey :] :이 클래스는 키 aRemovedView 에 대해 키 호환 코딩 키가 아닙니다.’