Iphone 如何检查特定iOS版本上是否有可用的功能?

Iphone 如何检查特定iOS版本上是否有可用的功能?,iphone,objective-c,cocoa-touch,uinavigationbar,appearance,Iphone,Objective C,Cocoa Touch,Uinavigationbar,Appearance,在我的AppDelegate中,我使用外观代理创建自定义UI: //Setup custom appearances [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"header"] forBarMetrics:UIBarMetricsDefault]; [[UINavigationBar appearance] setTintColor:[UIColor blackColor]];

在我的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版本上是否有此功能,以避免崩溃?

不要检查操作系统,检查功能是否存在

如果([[UINavigationBar类]响应选择器:@selector(外观)]{}
请尝试以下操作:

[UIDevice currentDevice].systemVersion

令人震惊的我不认为检查操作系统版本有什么坏处。仅仅是一个符号的存在并不能使它的底层实现在不同的操作系统版本之间保持一致。苹果不建议检查版本。正如@joshua所说,你应该寻找你感兴趣的特性。虽然我基本上同意(除了少数情况),但我相信推荐一种不同的方法并不是一个完整的答案。对我来说,一个例外情况是解决iOS 4中的框架缺陷,该缺陷导致iOS 5出现问题,而iOS 5中的API没有改变。一个完整的答案回答了这个问题,然后推荐了更好的方法。解决操作系统错误是一个完全不同的问题。类是对象,像我这样对类调用实例方法是完全有效的,并将给出预期的结果。可能重复感谢否决投票。顺便说一句,之前的问题是“如何检查用户是否在iOS4或iOS5上?”人们应该在否决投票前验证事实。