2012-10-02 5 views
0

나는 버튼이 사용자 정의를 다시 가지고 : 어떻게 아이폰 OS 6 시뮬레이터 내 응용 프로그램을 테스트되지 않는 코드는 5

- (IBAction)backToMenu:(id)sender { 

[self.presentingViewController dismissModalViewControllerAnimated:YES]; 

} 

dismissModalViewControllerAnimated이되지 않습니다라고, 그리고 내가 대신 dismissViewControllerAnimated를 사용해야합니다, 그래서 아이폰 OS 6 코드를 사용에서 iOS 5에

을 폴백 할 수 있습니다 내가 시도이 :

if([self respondsToSelector:@selector(presentingViewController:animated:completion:)]) 
    [self.presentingViewController dismissViewControllerAnimated:(YES) completion:nil]; 
else if([self respondsToSelector:@selector(presentingViewController:animated:)]) 
    [self.presentingViewController dismissModalViewControllerAnimated:YES]; 
else 
    NSLog(@"Oooops, what system is this ?!!! - should never see this !"); 

그러나 결과, 나는 NSLog없이보기를보고 있어요없이

이 기각되고, 힌트 요?

미리 감사드립니다.

답변

6

테스트 할 선택기가 호출하는 선택기와 다릅니다. 다음보십시오 :

if([self.presentingViewController respondsToSelector:@selector(dismissViewControllerAnimated:completion:)]) 
    [self.presentingViewController dismissViewControllerAnimated:(YES) completion:nil]; 
else if([self.presentingViewController respondsToSelector:@selector(dismissModalViewControllerAnimated:)]) 
    [self.presentingViewController dismissModalViewControllerAnimated:YES]; 
else 
    NSLog(@"Oooops, what system is this ?!!! - should never see this !"); 

중요한 차이점은 호출하고있는 객체이다 -이 경우, self.presentingViewController이 - 당신이 그 객체 통화중인 방법과 다르다. 후자를 선택기라고 부르며, 이는 래퍼 @selector() 안에 넣기를 원합니다.

+0

가끔은 OS 버전을 테스트하고 경로를 선택하는 것이 좋습니다. 그리고 테스트 방법에 관계없이 (상대적으로) 전역 변수를 설정할 수 있으므로 한 번만 테스트 한 다음 (지저분한)'respondsToSelector' 표현식 대신에 (깔끔한) 전역 플래그를 기반으로 어느 경로를 선택해야합니다. –

+0

대단히 감사합니다. Tim, 아주 잘 설명해 주었고, 매력처럼 작동했습니다. – roymckrank

5

[self dismissViewControllerAnimated : 예 완료 : 없음]; for iOS 6

+0

완료는 여기에 NULL이어야합니다. 네, 맞지 않습니다. –