[objective-c] presentViewController : iOS <6 (AutoLayout)에서 충돌

이것은 내가 얻는 이상한 충돌입니다. 특정 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에서는 충돌하지 않습니다.



답변

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

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

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

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

답변

스크린 샷

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

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


답변

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

- (void) loadView

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


답변

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


답변