#ifdef макросы для контроля версий - PullRequest
1 голос
/ 31 июля 2010

Я использую макросы для различия версий, но не могу заставить его работать должным образом.Я использовал:

#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 всегда определяется.Есть идеи?

С наилучшими пожеланиями, Дмитрий М.

Ответы [ 2 ]

2 голосов
/ 31 июля 2010

Директивы процессора #if… разрешаются во время компиляции. Пока вы компилируете для 4.0 SDK, всегда будет выбран вариант 4.0.

Если вы хотите, чтобы приложение работало для <4.0, вы должны использовать проверку во время выполнения: </p>

UIApplication* app = [UIApplication sharedApplication];
if ([app respondsToSelector:@selector(setStatusBarHidden:withAnimation:)])
  [app setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
else
  [app setStatusBarHidden:YES animated:YES];
0 голосов
/ 15 ноября 2010

Небольшое изменение -

Следующий код должен работать:

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

Обратите внимание, что это __IPHONE_4_0, а не _IPHONE_4_0

...