저는 XCode6 베타를 사용하고 있으며 Swift를 사용하고 있습니다. 뷰 컨트롤러에 일부 자동 레이아웃 제약 조건을 설정하면 앱이 다음 오류와 함께 충돌합니다.
Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named IBNSLayoutConstraint'
답변
런타임에 제거되는 IBOutlet에 제약 조건을 설정했기 때문에이 오류가 발생합니다. 이것은 Interface Builder에서 제약 조건을 자리 표시 자로 설정할 때 발생합니다. 제약 조건이 제거되었으므로 아카이브를 취소 할 때 그렇게 할 수 없다는 오류가 발생합니다.
이를 수정하는 방법에는 두 가지가 있습니다.
방법 1
- 스토리 보드를 마우스 오른쪽 버튼으로 클릭> 다른 이름으로 열기> 소스 코드
- 열린 스토리 보드 xml에서
placeholder="YES"
. - 런타임에 제거되도록 설정된 제약 조건을 찾을 수 있습니다. 제약 조건에서 자리 표시 자 속성을 제거하고 저장 한 후 닫습니다.
- 앱을 실행하면 문제가 해결 될 것입니다.
방법 2
- Interface Builder에서 문제를 일으키는 제약 조건을 찾으십시오. GUI에서 Placeholder 옵션을 선택 취소하십시오. 이것은 충돌을 일으키는 ViewController의 IBOutlet에 설정된 제약 조건 중 하나 여야합니다.
다음과 같이 표시되어야합니다.
대안
실제로 제약 조건이 자리 표시자가되기를 원한다고 가정하면 참조하는 콘센트를 제거해야합니다. 이렇게하려면 자리 표시자가 될 제약 조건을 선택합니다. 그런 다음 연결 검사기를 열고 (오른쪽에서 가장 먼 버튼 : (->)) 해당 제약 조건에있을 수있는 참조 출력을 제거합니다.
답변
나는 지금 막 같은 문제가 있었고 다음은 나를 위해 일했습니다.
내 앱의 작동하는 버전을 App Store에 출시하고 며칠 후 UITabBarController에서 내 탭 중 하나를 탭하여 다시 작업을 시작했는데 오류로 인해 충돌이 발생했습니다.
Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named IBNSLayoutConstraint'
내가 알고있는 자리 표시 자 레이아웃 제약이나 정의하지 말아야 할 제약 아웃렛이 없었습니다.
나를위한 해결책은 단순히 크기 클래스를 끄고 iPhone 용 크기 클래스 데이터를 유지하는 것입니다 (앱은 iPhone 전용 임). 이것은 내가 크기 클래스에서 놓친 모든 것을 삭제했을 것입니다. 크기 클래스를 원해서 다시 켜고 앱이 다시 작동했습니다.
답변
답변
크기 클래스 사용에 문제가 있습니다. 스토리 보드 속성에서 해당 옵션을 비활성화하고 자동 레이아웃 만 사용합니다. 아이폰 전용 앱이라 큰 문제는 아니었다.
답변
결국 내게 일어난 일은 Interface Builder 내부에서 하위 뷰를 잘라서 다른 xib에 복사하는 것입니다. 이로 인해 원래 xib 인터페이스 빌더의 하위 뷰가 회색으로 표시됩니다. 원래 위치에서 하위보기를 제거한 후 (선택 및 삭제). 오류를 없앨 수있었습니다.
답변
“자동 레이아웃 사용”이라는 검사기의 “검사자에게 파일 표시”에서 제한을 사용하지 않는 xib 파일을 선택할 때 검사기 창에 옵션이 있습니다.
답변
스크롤 뷰를 변경하여 Stackoverflow의 다른 곳에서 찾은 솔루션을 사용하여 포함 된 선택기 컨트롤이 제대로 작동하도록했습니다. 내 새 스토리 보드는 단순히 이러한 속성을 스크롤 뷰에 추가했습니다.
delaysContentTouches="NO" canCancelContentTouches="NO"
그러나 또한 다른 장면의 스토리 보드에서 다음과 같은 새로운 조각을 보았습니다.
<variation key="default">
<mask key="subviews">
<exclude reference="86H-aM-wei"/>
</mask>
</variation>
나는 그것이 어디서 왔는지 모른다. 처음에는 모든 것이 내 개발 컴퓨터에서 찾을 수 있기 때문에 무시했습니다. 그러나 빌드가 릴리스로 빌드되고 테스트되었을 때 충돌이 발생했습니다. 그 가짜 (?) 조각을 제거하면 크래시가 수정되었으며 다른 것에 영향을 미치지 않는 것 같습니다.