【问题标题】:How can I check if a feature is available on a specific iOS version?如何检查某个功能在特定 iOS 版本上是否可用?
【发布时间】:2011-12-22 08:18:07
【问题描述】:

在我的 AppDelegate 中,我使用外观代理来制作自定义 UI:

//Setup custom appearances
    [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"header"] forBarMetrics:UIBarMetricsDefault];
    [[UINavigationBar appearance] setTintColor:[UIColor blackColor]];
    [[UIToolbar appearance] setBackgroundImage:[UIImage imageNamed:@"header"] forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];

这将在 iOS4 中崩溃。如何检查该功能在他们运行的 iOS 版本上是否可用,从而避免崩溃?

【问题讨论】:

标签: iphone objective-c cocoa-touch uinavigationbar appearance


【解决方案1】:

不检查操作系统,检查能力是否存在。

if ([[UINavigationBar class] respondsToSelector:@selector(appearance)]) {}

【讨论】:

  • 令人震惊。我认为检查操作系统版本没有任何害处。仅仅存在一个符号并不能使其底层实现在操作系统版本之间相等。
  • Apple 不建议检查版本。正如@joshua 所说,您应该寻找您感兴趣的功能。
  • 虽然我基本同意(极少数情况除外),但我认为推荐不同的方法并不是一个完整的答案。对我来说,一个例外情况是针对 iOS 4 中的一个框架错误的解决方法,该错误导致 iOS 5 中的 API 未更改。一个完整的答案回答了问题,然后推荐了更好的方法。
  • 解决操作系统错误是一个完全不同的问题。
  • 类是对象,像我一样在类上调用实例方法是完全有效的,并且会得到预期的结果。
【解决方案2】:

试试这个:

[UIDevice currentDevice].systemVersion

【讨论】:

  • 感谢您的反对。以前的问题是“如何检查用户使用的是 iOS4 还是 iOS5?”顺便说一句。
  • 人们应该在投票前验证事实。
猜你喜欢
  • 1970-01-01
  • 2021-02-02
  • 1970-01-01
  • 1970-01-01
  • 2012-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多