2011-10-13 3 views
2

iOS 4.3 용 Xcode 4.1에서 내 응용 프로그램을 개발하고 있었지만 어제 IOS 5.0 SDK로 XCode 4.2로 업데이트했습니다.performSelector가 UIViewControllerHierarchyInconsistency 예외를 던졌습니다

아이폰 4.3 시뮬레이터에서 응용 프로그램을 실행할 때 훌륭하게 작동합니다. 나는 아이폰 5.0 시뮬레이터에서 테스트하기로 결정하고, 다음과 같은 문제가 나타나

  • 내가 추가됩니다 일부 사용자 지정 구성 요소 "MyCustomComponent"를 구현하는 뷰 컨트롤러 철 "MyViewController", 및 사용자 정의 클래스를 가지고 "MyViewController". MyCustomComponent에는 버튼이 있고, MyViewController에서 peformSelector를 터치하면 EXC_BAD와 충돌합니다. 동일한 코드가 iPhone 4.3 시뮬레이터에서 완벽하게 작동합니다. 어떤 아이디어?
  • 사용자 정의 탐색 모음 - 전혀 작동하지 않습니다. UINavigationBar를 구현하고 drawRect를 재정의하는 사용자 정의 배경을 설정하려고 시도하지만 ios 5에는 표시되지 않습니다.
+0

내비게이션 막대가 고정됨 http://weston-fl.com/blog/?p=3024 – Drabuna

+0

좋아, 그럼 내가 알아낼 것 같아. xcode를 다시 설치할 때 콘솔이 꺼져서 오류 메시지가 표시되지 않았습니다. 지금 켜고 "캐치되지 않은 예외 'UIViewControllerHierarchyInconsistency'로 인해 앱 종료 중 오류가 발생했습니다. 문제는 내가 self.view = myCustomComponent.view를 사용하여 MyViewController에 MyCustomComponent를 추가한다는 것이 었습니다. [self.view addSubview : myCustomCoponent.view]를 수행해야 할 때, ios 4에서는 문제가되지 않았습니다.3,하지만 그것의 큰 거래를 보인다. – Drabuna

답변

6

확인을, 그래서 내가 그것을 figrued 추측 : 유효한 객체 인 경우

,보십시오. xcode를 다시 설치할 때 콘솔이 꺼져서 오류 메시지가 표시되지 않았습니다. 지금 켜져 인해 'UIViewControllerHierarchyInconsistency'

문제는 내가 사용 MyViewController하는 MyCustomComponent를 추가 한 것을 캐치되지 않는 예외 응용 프로그램 종료 오류

있어

self.view=myCustomComponent.view 

때 해야한다

[self.view addSubview:myCustomCoponent.view] 

그것은 ios 4.3에서는 문제가 아니지만 ios 5에서 큰 문제인 것처럼 보입니다.

+0

자신이 발견 한 내용을 게시했습니다. –

-1

EXC_BAD_ACCESS는 객체가 존재하지 않음을 의미합니다. performSelector-method를 수행하는 객체를 NSLog-ging 해보십시오.

EDIT : 로깅을 시도 할 때 충돌이 발생하면 할당이 취소되었습니다. 객체를 올바르게 유지했는지 확인하십시오!

if(![obj respondsToSelector:@selector(mySelector:)]){NSLog(@"no such method!");} 
+0

'nil'에 메시지를 보내는 것은 Objective-C에서 아무 것도하지 않는다. –

+0

아 맞습니다. 편집 – oskob

+0

개체가 유효하고 개체가 선택기에 응답하지만 pefrormSelector (( – Drabuna

0

나는 같은 문제로 고생했습니다.

스토리 보드가없는 새로운 마스터 - 디테일 애플리케이션을 만들면 AppDelegate.m에서이 코드를 볼 수 있습니다.

MasterViewController *masterViewController = [[MasterViewController alloc] initWithNibName:@"MasterViewController" bundle:nil]; 
self.navigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController]; 
self.window.rootViewController = self.navigationController; 
[self.window makeKeyAndVisible]; 

그냥 자신의 ViewController에서 시작하고 위임을 설정 "MainWindow를 ON하지 의존". MainWindow.xib에서 뷰의 링크를 해제하는 것을 잊지 마세요. 그렇지 않으면 뷰가 2 회 호출됩니다.

관련 문제