Xcode - NSUnknownKey 수정 방법예외', 이유:… 이 클래스는 키 X" 오류에 대한 키 값 코딩에 준거하지 않습니다.
UILabel an IBOutlet우리 반에서 만들어졌어요.
내 어플리케이션이 다음과 같은 오류로 크래시 되고 있다.
이것은 무엇을 의미합니까?
어떻게 하면 고칠 수 있죠?
*** 예외 'NSUnknownKey'로 인해 앱을 종료하는 중예외', 이유: '<UIViewController 0x6e36ae0> setValue:forUndefinedKey:): 이 클래스는 키 XXX에 대한 키 값 코딩에 준거하지 않습니다.'
xib에 접속 상태가 좋지 않을 수 있습니다.
이런 오류는 여러 번 있었습니다.이 경우 TechZen의 답변은 전적으로 맞지만, 또 다른 일반적인 원인은 nib에 있는 File's Owner에 이미 연결되어 있는 .h/.m의 IBOutlet 속성의 이름을 변경하는 것입니다.
팁에서:
- IB에서 개체를 선택하고 '연결 검사기'로 이동합니다.
'참조 아웃렛'에서 개체가 이전 속성 이름에 아직 연결되어 있지 않은지 확인하십시오.이 경우 작은 'x'를 클릭하여 참조를 삭제하고 다시 빌드합니다.
Storyboard를 사용하는 경우 UIButton에 여러 개의 할당이 있을 수 있습니다(솔루션은 nib의 경우와 거의 동일).
뷰 컨트롤러의 xib 클래스가 잘못되었을 수 있습니다.
당신의 프로젝트를 다운받았습니다.
에러가 발생하고 있는 것은,
'NSUnknownKey'예외', 이유: '<UIViewController 0x3927310> setValue:forUndefinedKey:): 이 클래스는 키 문자열에 대한 키 값 코딩에 준거하지 않습니다.'
에 의해 발생합니다.Second 의 in " "MainWindow.xib대신 의 클래스가 있습니다.올바른 클래스로 변경하면 문제가 해결됩니다.
덧붙여서 Objective-C에 string과 같은 이름을 붙이는 것은 나쁜 습관입니다.런타임 명명 충돌을 유발합니다.단 한 번의 연습 앱으로도 그것들을 피할 수 있습니다.명명 충돌은 추적하기가 매우 어려우며 시간을 낭비하고 싶지 않습니다.
이 에러의 또 다른 원인으로는 어떤 컨트롤러에서 다른 컨트롤러로 요소를 복사하여 붙여넣을 때 Xcode는 이 요소를 편집하여 새로운 컨트롤러로 재링크한 후에도 원래 컨트롤러로의 링크를 유지합니다.
이 에러의 다른 생각할 수 있는 원인은 다음과 같습니다.
불량 콘센트
에서 아웃렛 이름을 삭제하거나 이름을 변경했습니다..hfilename을 클릭합니다.
.xib ★★★★★★★★★★★★★★★★★」.storyboard파일의 연결 검사기.
또 하나의 가능한 이유
(내 경우)을 가진 의 확장과 한 속성 등 다음 확장에서 해당 단, ( ) UIView 확장에서 삭제합니다.<userDefinedRuntimeAttributes>로 있습니다.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> 코드로 > > > > > > > > > > > > 를 삭제합니다.</userDefinedRuntimeAttributes>의
경우에 따라 이 값은 "대상으로부터 상속"과 관련이 있을 수 있습니다.단일 대상 앱의 경우 대상에서 상속을 선택하면 됩니다.대상이 둘 이상인 경우 원하는 대상을 선택합니다.
테이블에 커스텀 ViewCell을 구현하려고 할 때 이 오류가 발생했습니다.XIB의 View컨트롤러를 강조 표시하여 CellView의 요소에 접속하면 "이 클래스는 키의 키 값 코딩에 준거하지 않습니다"라는 오류가 발생하였습니다.이러한 항목을 삭제하면 오류가 해소됩니다.
아래 이미지의 연결을 삭제합니다. ![[ File Owner ]가 강조 표시될 때 인스펙터의 연결을 삭제합니다.](https://i.stack.imgur.com/VHNZG.png)
표 보기 셀에만 연결해야 합니다.체크하려면 테이블 뷰 셀을 클릭하고 인스펙터에서 연결을 찾습니다.

이 오류를 없애기 위해 시뮬레이터/iPhone에서 앱을 삭제해야 했습니다.
범용 앱이 아닌 iPhone 전용 앱인 경우 다음 필드가 비어 있는지 확인하십시오.
Targets > Summary > iPhone/iPod 도입 정보 > 메인 인터페이스
xib를 지정하면 크래시 됩니다.
이 오류는 이미 연결된 Interface Builder 개체가 소유자의 소스(파일 소유자)에서 제거 또는 이름 변경되었음을 나타냅니다.
[ Interface Builder ](인터페이스 빌더)에서 [Files' Owner](파일 소유자)를 클릭하여 이 문제를 해결합니다.
아래 그림에서 "aRemovedView" 오른쪽에 느낌표가 있는 것을 볼 수 있습니다.이는 IB에 이미 연결되어 있는 상태에서 IBOutlet 보기 개체를 삭제했기 때문입니다.

이로 인해 다음 오류가 발생합니다.NSUnknownKey 예외로 인해 앱을 종료하는 중예외', 이유: '[ setValue : forUndefinedKey : ]: 이 클래스는 aRemovedView 키에 대한 키 값 코딩에 준거하지 않습니다.'
저도 같은 문제가 있었습니다만, TechZen의 답변은 훌륭할지도 모릅니다만, 제 상황에 적용하는 것은 곤란했습니다.
최종적으로 이 문제는 파일 소유자가 아닌 오브젝트 아래에 있는 컨트롤러(아래 그림에서 강조 표시)를 통해 라벨을 링크함으로써 해결되었습니다.
이게 도움이 됐으면 좋겠다.

스토리보드 소스 코드에 오류가 있는 경우 다음 절차를 따릅니다.
- 먼저 스토리 보드를 소스 코드로 엽니다.
- 찾다
<connections> - 불필요한 접속을 삭제하다
예를 들어 다음과 같습니다.
<connections>
<outlet property="mapPostsView" destination="4EV-NK-Bhn" id="ubM-Z6-mwl"/>
<outlet property="mapView" destination="kx6-TV-oQg" id="4wY-jv-Ih6"/>
<outlet property="sidebarButton" destination="6UH-BZ-60q" id="8Yz-5G-HpY"/>
</connections>
보시는 바와 같이 코드 변수 이름과 스토리보드 레이아웃 xml 태그 사이의 연결입니다.

내 수정은 Gerard Grundy의 수정과 비슷했다.XIB를 사용하여 커스텀 UITable View Cell을 작성할 때 실수로 커스텀 클래스 이름을 UITable View Cell이 아닌 파일 소유자에게 적용했습니다.클래스를 캔버스의 UITableViewCell에 적용하여 IBOutlet 속성을 연결하면 문제가 해결되었습니다.
- .
IBOutletIBOutlet이바르 - 하여 NIB를 ?
UIViewController[SecondView initWithNibName:@"yourNibName" bundle:nil];
이 문제는 디바이스(iPhone)에서 디버깅할 때만 발생합니다.iOS 시뮬레이터는 정상적으로 동작하고 있었습니다.Xcode에서 "Product-> Clean"을 하면 문제가 해결되는 것 같았는데, 그 이유를 알 수 없습니다.
같은 에러 메세지가 표시되고, http://www.idev101.com의 Kira씨(!)에게 감사해, 과제를 해결할 수 있었습니다.나는 이 모든 실들을 검색해보고 쌓은 후에야 그녀의 사이트를 찾았다.StackOverFlow에 관한 다음 과제를 위해 이 글을 올립니다.그 사람이 구글을 통해 이 스레드에 도달할 가능성이 높기 때문입니다.
내가 이걸 잘못 만들었다는 걸 깨달았어
UIViewController *deviceViewController = [[UIViewController alloc] initWithNibName:@"DeviceViewController" bundle:nil];
이것 대신:
DeviceViewController *deviceViewController = [[DeviceViewController alloc] initWithNibName:@"DeviceViewController" bundle:nil];
어디에
DeviceViewController
우리 반의 이름은 다른 이름으로도 알려졌나요?
DeviceViewController.h
DeviceViewController.m
해야 합니다.
"import DeviceViewController.h"
(.m 파일)을 사용하여 다른 UIViewController를 호출합니다.
저와 같은 초보자에게만 당연한 말을 하고, 질문과는 전혀 관련이 없는 질문이지만, 저는 이 에러 메시지에 대한 답을 찾기 위해 4시간(?)을 검색했습니다.한두 분에게 나눠주시면 감사하겠습니다.
PS: 다른 UIView Controller를 로드하기 위해 코드가 어떻게 계속되는지 궁금하신 분:
[self presentViewController:deviceViewController animated:YES completion:nil];
컨트롤을 드래그하여 아웃렛 또는 액션을 만들고 삭제하지 않았기 때문에 발생할 수 있습니다.코드를 삭제했거나 cmd+Z를 충분히 작성했더라도 스토리보드의 연결 검사기로 이동하여 작성한 작업 또는 콘센트가 아직 여기에 있는지 확인해야 합니다.
다른 답변들을 살펴보면 이 오류를 일으킬 수 있는 많은 것들이 있는 것 같습니다.여기 하나 더 있어요.
네가 만약
- 커스텀 뷰가 있다
- @IBInspectable 속성 추가
- 나중에 삭제했습니다.
그러면 다음과 같은 오류가 발생할 수 있습니다.
[사용자 지정 보기]에서 (xxx) 사용자 정의 검사 속성을 설정하지 못했습니다.: 이 클래스는 키 [xx]의 키 값 코딩에 준거하지 않습니다.
해결책은 이전 속성을 삭제하는 것입니다.
클래스의 Identity 인스펙터를 열고 User Defined Runtime Attributes 아래에서 속성 이름을 선택한 후 빼기 버튼(-)을 누릅니다.
뷰 컨트롤러에 원래 .xib 파일이 있었지만 지금은 프로그래밍 방식으로 작성되어 있을 때 이 문제가 발생합니다.
이 프로젝트에서 .xib 파일을 삭제했는데도.사용자의 iPhone/iPad에는 이 뷰 컨트롤러용 .xib 파일이 포함되어 있을 수 있습니다.
보통 .xib 파일을 로드하려고 하면 다음과 같은 크래시가 발생합니다.
Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIViewController 0x18afe0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key welcomeLabel.'
프로그래밍 방식으로 작성하는 경우의 해결 방법은 다음과 같습니다.
-(void)loadView {
// Ensure that we don't load an .xib file for this viewcontroller
self.view = [UIView new];
}
Identity Inspector에서 View Controller의 "Module" 속성이 예상과 다를 수 있습니다.또한 새 클래스가 대상 목록에 추가되었는지 확인하십시오.
타겟이 2개인 프로젝트(Main Window XIB)에서도 같은 문제가 있었습니다.이 에러를 일으킨 근본적인 문제는 UIViewController 클래스가 두 번째 프로젝트의 리소스 목록에 포함되지 않았다는 것입니다.즉, 인터페이스 빌더를 사용하여 MainWindow.xib에서 지정할 수 있었지만 실행 시 시스템에서 클래스를 찾을 수 없었습니다.
예를 들어 cmd를 클릭하여 해당 UIViewController 클래스를 클릭하여 'Targets' 탭에 포함되어 있는지 다시 확인합니다.
덧붙이자면, 저도 이 에러가 발생하고 있었기 때문입니다.이 모든 답변은 UI 및 스토리보드 관련 작업에 가장 적합한 것 같습니다.원래 포스터는 UI로 동작하고 있는 것 같았지만, 이 에러의 원인을 검색할 때, 대부분의 질문은 이 질문으로 이어집니다.다른 질문들은 중복으로 닫히거나 스토리보드에 있는 것들을 연결하는 데 문제가 있기 때문에 솔루션을 추가합니다.
Swift 2 swift swift swift swift swift swift swift swift swift swift swift swift swift swift swift 。나는 필요한 프록시 오브젝트와 스터브를 모두 만들었다.이 오브젝트는 "XML"에서 온 입니다.을 사용법NSObject and and를 합니다.setValue:forKey그 위에 올려놔요. ★★★setValue:forKey이 오류로 인해 폭파된 속성을 설정하려고 했습니다.
하고 있는 「」 「」 「」 「」Bool?,CShort?,String?그 로 setValue:forKey.
나는 이 모든 하기 시작했다.setValue:forKey에 의하면, 나의 「마음」은default는 스위치로 했습니다.String?.
옵션인 swift type을 사용할 수 없다는 것을 이제야 알았습니다.setValue:forKeyObjective-C와 같은 직접 한String? ★★★★★★★★★★★★★★★★★」NSNumber?는 결국 것을 되었다.CShort?NSNumber?하다★★★의 Bool? ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★Bool 에ize합izeizeizeizeize로 초기화 .false그런 사치를 누릴 수 없는 사람도 있을 것이다.
어쨌든, 이것은, 같은 문제를 안고 있는 다른 사람에게 도움이 되어, 계속 이 질문으로 리다이렉트 되어, 「UI에서는 아무것도 하고 있지 않다!!」라고 혼잣말을 하는 것이 얼마나 골칫거리인가.
마지막으로 다시 한 번 강조하지만 키-값 코딩은 옵션과 함께 사용할 수 없습니다.아래는 어딘가를 찾았지만, 이 글을 올린 사람에게 사과하고, 어디서 발견했는지 기억한다면 신용을 주겠다.
KVC는 Cocoa / Objective-C이고 Objective-C는 Objective-C에 브리지되지 않았기 때문에 Optional Int 속성에 KVC를 사용할 수 없습니다.Objective-C는 Objective-C에 브리지된 유형만 볼 수 있습니다.
NSObject에서 파생된 클래스 유형
@objc에 의해 공개되는 클래스 유형
가교된 신속한 구조
"이 클래스는 키에 대한 키 값 코딩에 준거하지 않습니다." 조금 늦었지만 답변이 다르기 때문에 게시할 필요가 있다고 생각합니다.두 번째 컨트롤러를 잘못 눌렀습니다.여기 샘플이 있습니다.
컨트롤러를 잘못 누르는 방법
UIViewController* controller = [[UIViewController
alloc]initWithNibName:@"TempViewController" bundle:nil];
[self.navigationController pushViewController:controller animated:true];
올바른 방법
TempViewController* controller = [[TempViewController
alloc]initWithNibName:@"TempViewController" bundle:nil];
[self.navigationController pushViewController:controller animated:true];
위와 같은 답변을 찾지 못했기 때문에 같은 문제를 안고 있는 사람에게 도움이 될 수도 있습니다.
이름을 바꾸거나 삭제한 Xib Interface의 컴포넌트를 참조하고 있는 경우가 있습니다.난 참고 자료로 충분해
중복된 프로젝트에서 이 문제가 발생하였고, 다음 두 곳을 확인함으로써 해결되었습니다.
m - - Sources 1 - 목m 、 . m 일---- 。-> > - 1 - 1 - 1 - 1 。
후 빌더 이것은 IB에서만 일 수 하여 모든 이미지 등의 링크를 합니다.2 - 음음음음음음 ( IB ) 。그런 다음 모두 다시 연결합니다.Attribute at에 IB 。
효과가 있기를 바랍니다.
제가 발견한 또 다른 "불준수" 문제는 어떤 이유로든 수업 복사본이 두 개 있는 경우였습니다.
잘못된 복사본에 키를 추가하고 있었어요.Interface Builder는 여전히 키를 보았고 제가 연결할 수 있게 해주었습니다. 그러나 런타임에는 새로운 키가 없는 클래스의 다른 복사본을 사용하고 있었습니다.
올바른 복사본을 찾으려면 XCode의 cmd를 사용하여 다른 클래스 이름을 클릭하여 올바른 복사본으로 이동한 다음 사용하지 않는 잘못된 복사본을 삭제했습니다(먼저 사용하지 않는 복사본에서 편집 내용을 가져온 후).
그 이야기의 교훈은 중복된 수업 파일은 좋지 않다는 것이다.
이 오류는 다른 것입니다!
내가 고친 방법은 이렇다.xcode 버전 6.1.1과 swift를 사용하고 있습니다.앱이 다음 화면으로 이동하기 위해 segue를 실행하려고 할 때마다 이 오류가 발생했습니다.이게 내가 한 일이야.
- 버튼이 올바른 조작에 접속되어 있는 것을 확인.(이것은 문제가 아니지만, 아직 확인할 수 있습니다.)
- 버튼에 실수로 작성한 추가 액션이나 콘센트가 없는지 확인합니다.(이것은 문제가 아니지만, 아직 확인할 수 있습니다.)
- 로그를 체크하고 다음 화면의 모든 버튼에 올바른 조작이 있는지 확인합니다.세그먼트가 있는 경우는, 그 버튼에 일의의 식별자가 있는 것을 확인해 주세요(이것이 문제였습니다).
- 세그먼트 중 하나에 고유 식별자가 없습니다.
- 버튼 중 하나는 액션과 콘센트 2개를 실수로 만들었습니다.
- 추가 콘센트를 모두 삭제하고, 다음의 화면의 세그먼트(segue)에 일의의 식별자가 있는 것을 확인합니다.
건배.
저 같은 경우에는.병합 후 xib 파일에 아웃렛이 누락되지 않았습니다.
Shift + 명령 + K
내 문제를 해결했다.나는 프로젝트를 청소하고 다시 지었다.
저도 같은 증상이 있었어요.근본 원인은 소스 파일의 "Target Membership"이 올바른 대상으로 설정되지 않았기 때문입니다.그러면 내 클래스가 만들어지지 않고 내 앱에 포함되지 않을 거야.
수정 방법:
- .m 파일을 강조 표시합니다.
- 오른쪽 창에서 파일 검사기를 선택합니다.
- "Target Membership" 섹션에서 적절한 빌드 대상이 선택되어 있는지 확인합니다.
이게 누군가 도움이 됐으면 좋겠네요
문제를 일으키는 IBOutlets를 사용하는 커스텀 UIViewController 서브클래스가 있는 경우 실제로 오류를 제거할 수 있는 유일한 단계는 다음과 같습니다.
1 클래스를 UIViewController로 변경합니다.
.2 모든 콘센트를 분리합니다(모든 콘센트에 노란색 경고 삼각형이 표시됨). 문제가 있는 콘센트를 분리하는 것만으로 충분합니다.
.3 모든 표준 단계 수행 - ↑ kkK, 파생 데이터 삭제 ( , 기도 매트, 걱정 비즈)
4 앱을 기동합니다.문제가 있는 장면으로 이동합니다.
5.5 앱을 종료하고 Interface Builder로 돌아가 클래스를 사용자 지정 클래스 이름으로 되돌립니다.
6 콘센트를 다시 접속합니다.
앱을 실행하면 일반적으로 주요 가치 컴플라이언스 문제가 해결됩니다.
에는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.module 되어 있다target 됩니다.module 및 , " " "Inherit Module from target성공했어.
제 경우, 이는 잘못된 Nib를 참조한 것이 원인입니다.
BMTester *viewController = [[BMTester alloc] initWithNibName:@"WrongNibName" bundle:nil];
스토리보드에서 오류가 발생했습니다.위의 솔루션은 문제가 없는 것 같아서 뷰 컨트롤러를 삭제하고 다시 추가(물론 segue를 다시 연결하고 클래스를 재할당)했습니다.실제는 모르지만, 이 작업을 시작하기 직전에 관련 뷰 컨트롤러 클래스의 이름을 변경했기 때문에, 뭔가 숨기고 있었을지도 모릅니다.
언급URL : https://stackoverflow.com/questions/3088059/xcode-how-to-fix-nsunknownkeyexception-reason-this-class-is-not-key-valu
'programing' 카테고리의 다른 글
| Java POI : 계산식이 아닌 Excel 셀 값을 읽는 방법 (0) | 2023.04.19 |
|---|---|
| Windows에 GRP와 같은 패턴 매칭 유틸리티가 있나요? (0) | 2023.04.19 |
| 포맷을 유지하면서 R에서 Excel로 템플릿에 쓰기 (0) | 2023.04.19 |
| Windows에서 cat을 대체할 수 있습니까? (0) | 2023.04.19 |
| std:: 문자열을 LPCTR로 변환하는 방법 (0) | 2023.04.19 |




