【问题标题】:Preprocessor and/or Macro way to check iOS SDK version?检查 iOS SDK 版本的预处理器和/或宏方法?
【发布时间】:2013-08-23 15:31:38
【问题描述】:

我正在构建一个黑色主题的 iOS 6 和 7 应用程序。我知道我可以致电[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; 使 iOS 7 状态栏适合深色主题应用程序。

问题是我要将我的应用程序提交到 App Store,而目前 Xcode 5 还没有准备好,所以我必须使用 Xcode 4.6.x 来完成这项任务。但是,使用 Xcode 4.6,我无法从 iOS 7 编译新方法。我想我必须执行类似 ""if ios7"" 的操作,然后执行 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; 并重新定位我的应用程序窗口。

我正在尝试使用 #ifdef ... #else... 此代码是viewDidLoad 内的[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

任何人都可以帮助了解如何在某些功能中使用 #ifdef... 与该方法。

非常感谢!!!!

【问题讨论】:

  • 我刚刚在这里回答了这个问题:stackoverflow.com/questions/18404746/…
  • 我只是解决了我的问题。谢谢
  • 我的朋友,苹果不会接受任何低于 5 的 xcode 版本的构建。所以请尝试使用 xcode 5 及更高版本。

标签: ios objective-c sdk ifdefine


【解决方案1】:

虽然我不能 100% 确定我可以在不违反 NDA 的情况下完全回答这个问题,但我会尽力为您指明正确的方向。

你需要在Availability.h中使用__IPHONE_*#defines

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_6_0 && defined(__IPHONE_6_0)
  // iOS 6+ code here
#else
  // Pre iOS 6 code here
#endif

请注意#if#ifdef 将决定编译的代码,它不是运行时检测机制。

您可以使用 Open Quickly 并输入 Availability 轻松访问 Availability.h。

【讨论】:

  • 您的答案中没有任何内容包含在 NDA 中。你为什么那么想?仅涵盖 iOS 7 特定的 API。
  • iOS 7 SDK 中提供的 Availability.h 的内容肯定包含在 NDA 中吗?无论如何,这个答案应该能够轻松适应 iOS 7,甚至无需查看头文件。不过,我 +1 并投票赞成你的其他答案:)
【解决方案2】:

看看responsToSelector

 [delegate respondsToSelector:@selector(myMethod:)]

【讨论】:

  • 这没有帮助。编译器仍然会在实际调用该方法的那一行报错。
  • 如果接收器的类型为id 或您使用performSelector:withObject:,则不会。不管怎样,上面的#if 方法可能更整洁。
猜你喜欢
  • 1970-01-01
  • 2011-12-11
  • 2013-09-25
  • 2012-08-25
  • 1970-01-01
  • 1970-01-01
  • 2011-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多