1

매크로를 사용하여 버전을 다르게 지정했지만 강제로 제대로 작동하지는 않습니다. 내가 사용하지 :버전 관리를위한 #ifdef 매크로

#ifdef _IPHONE_4_0 
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; 
#else 
    [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES]; 
#endif 

#if __IPHONE_OS_VERSION_MAX_ALLOWED < _IPHONE_4_0 
    [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES]; 
#else 
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; 
#endif 

#if defined(__IPHONE_4_0) 
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; 
#else 
    [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES]; 
#endif 

을 아무리 내가 사용하는 버전을 - 항상 라인의 하나라고합니다. 그리고 __IPHONE_4_0은 항상 정의됩니다. 어떤 아이디어?

최고 감사합니다, 드미트리 M.

답변

2

#if… 프로세서 지시어는 컴파일시에 확인됩니다. 4.0 SDK 용으로 컴파일하면 4.0 변형이 항상 선택됩니다. 당신이 < 4.0 응용 프로그램 작업을하려는 경우

, 당신은 런타임 검사를 사용해야합니다

UIApplication* app = [UIApplication sharedApplication]; 
if ([app respondsToSelector:@selector(setStatusBarHidden:withAnimation:)]) 
    [app setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; 
else 
    [app setStatusBarHidden:YES animated:YES]; 
+0

답해 주셔서 감사합니다. 그러나이 경우이 매크로에 대해 무엇을 사용할 수 있습니까? 나는 다른 응용 프로그램에서 동일한 응용 프로그램이 망가질 경우 __IPHONE_OS_VERSION_MAX_ALLOWED가 다를 것이라고 생각했습니다. 아니? – Dmitry

+2

하나님. 매크로는 * 컴파일러의 상태에만 영향을줍니다 * - 일단 응용 프로그램이 컴파일되면 RAM의 안개 속으로 사라지고 응용 프로그램에 더 이상 영향을 미치지 않습니다. 이 경우 Apple은이 파일을 사용하여 컴파일 대상을 구분하여 하나의 헤더 파일을 여러 대상에 사용하고 유용한 오류 및 경고를 내 보냅니다. –

-1

작은 변화 -

다음 코드는 작동합니다 :

#if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_4_0 
     [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES]; 
#else 
     [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; 
#endif 

Plz 메모 __IPHONE_4_0 아닙니다 _IPHONE_4_0

+1

아니요, 작동하지 않습니다. 다른 대답을 참조하십시오. –

관련 문제