presentViewController : iOS <6 (AutoLayout)에서 충돌


92

이것은 내가 얻는 이상한 충돌입니다. 특정 ViewController로 이동하는 버튼을 누르면 충돌이 발생합니다. 충돌하는 줄은 다음과 같습니다.

DestinationInformationViewController *info = [[DestinationInformationViewController alloc] init];
[info setModalTransitionStyle: UIModalTransitionStyleCrossDissolve];
[self presentViewController:info animated:YES completion: nil]; // CRASHES HERE
[info release];

충돌 추적은 다음과 같습니다.

*** Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named NSLayoutConstraint' *** First throw call stack: (0x3758288f 0x35287259 0x37582789 0x375827ab 0x3153d54d 0x3153d6bb 0x3153d423 0x314ce001 0x3143c3c7 0x31319c59 0x3128fc17 0x3129a267 0x3129a1d5 0x3133959b 0x31338367 0x84091 0x374dc3fd 0x31271e07 0x31271dc3 0x31271da1 0x31271b11 0x31272449 0x3127092b 0x31270319 0x31256695 0x31255f3b 0x33c9822b 0x37556523 0x375564c5 0x37555313 0x374d84a5 0x374d836d 0x33c97439 0x31284cd5 0x82bb3 0x71200) terminate called throwing an exception(gdb) Could not instantiate class named NSLayoutConstraint

참고 : iPhone 4 iOS 5.1에서는 충돌하지만 iPhone 4S iOS 6 베타 2에서는 충돌하지 않습니다.


2
iPhone 5.1에서 Xcode 4.5 실행 및 앱으로 업그레이드 한 후에도 동일한 문제가 발생했습니다.이 링크를보십시오 : artstudioh.com/calculator/images/error_xcode.png
Sinuhe Huidobro

네, 우리가 그것을 확립했다고 생각합니다 :)
MCKapur

답변:


201

나는 이것이 Xcode의 새로운 인터페이스 빌더의 문제라고 생각합니다. Xcode 4.5의 인터페이스 빌더를 사용하여 .xib를 빌드하셨습니까? 나는 지금 바로 이와 같은 문제에 부딪 혔고 그것이 문제라고 생각합니다. 내 앱은 iOS 6에서 실행되지만 이전 버전은 아닙니다.

그리고 당신은 할 필요가 당신이 끌 수 있도록 Use Auto Layout당신의 xibs을 위해 .

다음을 통해 수행 할 수 있습니다.

  1. xib를 엽니 다.
  2. File Inspector탭으로 이동 하십시오.
  3. Interface Builder Document오른쪽 도구 모음 에서 섹션을 찾습니다 .
  4. Use Auto Layout옵션을 선택 취소하십시오 .

37
네, 펜촉의 "자동 레이아웃 사용"을 꺼야합니다.
Wevah

네, 같은 문제입니다. 어떻게해야합니까? 내가 엑스 코드 4.4에서 테스트해야합니다 (즉, 아이폰 OS 6 아니더라도 ... 내 아이폰 4 아이폰 OS 5.1은 엑스 코드 4.5에서 실행할 수있는 몇 가지 이상한 이유에 대한 이유가 될 수 있음)
MCKapur

16
xib의 기본보기에서 오른쪽 도구 모음의 인터페이스 빌더 문서 섹션.
Mark

관심있는 사람을 위해 Xcode 4.5에서 프로그래밍 방식으로 뷰를 설정하는 이전 뷰 컨트롤러 용 nib 파일을 만들었습니다. 곧 새 펜촉이 iOS 5에서 작동하지 않는다는 것을 깨달았 기 때문에 펜촉 파일을 삭제하고 비슷한 오류가 발생하기 시작했습니다. 심지어 새 펜촉 파일이 더 이상 내 프로젝트에 없다고 생각했습니다! 해결책은 .h 및 .m 파일의 이름을 ugh.
Keller

2
요즘 Apple의 품질 관리에 어떤 일이 일어나고 있는지 조금 걱정합니다.
ardochhigh

43

스크린 샷

새로운 XCode 업데이트와 IOS6 SDK를 다운로드 할 때도 같은 문제가 발생했습니다. 해결 방법은 다음과 같습니다.

오류가 발생한 인터페이스 빌더 파일 (xib 또는 스토리 보드 파일)을 선택하십시오. XCode의 오른쪽에있는 보조 편집기에서 왼쪽에서 첫 번째 탭을 선택하면 위의 스크린 샷과 같이 "자동 레이아웃 사용"옵션에 대한 확인란이 있습니다. 확인란을 선택 취소하십시오.


4

Nagaraja는 "xib를 사용하지 않는 경우 어떻게 해결해야합니까? 정확히이 문제가 발생했습니다. xib로 컨트롤러를 만든 다음 xib 파일을 제거하기로 결정했습니다. 충돌이 사라지지 않았습니다. 문제는 구현해야했던

- (void) loadView

내 컨트롤러 클래스에서. 이 방법을 구현하면 문제가 해결되었습니다.


1

presentViewController와의 충돌에 대한 또 다른 가능한 이유는 더 이상 존재하지 않는 변수에 연결된 nib에 무언가가있는 것입니다. 변수 이름이 변경되었거나 삭제되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.