#ifdef宏用于控制版本

时间:2010-07-31 07:32:05

标签: iphone version-control version conditional-compilation ifdefine

我使用宏来区分版本,但我不能强迫它正常工作。我用过:

#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 个答案:

答案 0 :(得分:2)

#if…处理器指令在编译时解析。只要您编译4.0 SDK,就会始终选择4.0变体。

如果您打算让该应用适用于&lt; 4.0,你应该使用运行时检查:

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

答案 1 :(得分:-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