如何仅针对具有iOS< 5兼容性的iOS 5执行代码?我写了这段代码:
BOOL isIOS5 = [[[UIDevice currentDevice] systemVersion] floatValue] > 4.3;
if (isIOS5) {
[[UINavigationBar appearance]setBackgroundImage:[UIImage imageNamed:@"cabecera.png"] forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance]setTintColor:[UIColor colorWithRed:80.0f/255.0f green:150.0f/255.0f blue:185.0f/255.0f alpha:1]];
}
如果我在iOS 5中执行该应用程序,它可以正常工作,但如果我尝试在iOS< 5模拟器中执行该应用程序,它会中断。有没有办法编写一个只有iOS5代码的应用程序但在iOS< 5时忽略它?
答案 0 :(得分:9)
在您的情况下,您应该检查当前iOS版本中该方法是否可用:
if([UINavigationBar respondsToSelector:@selector(appearance)]) //iOS >=5.0
{
[[UINavigationBar appearance]setBackgroundImage:[UIImage imageNamed:@"cabecera.png"] forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance]setTintColor:[UIColor colorWithRed:80.0f/255.0f green:150.0f/255.0f blue:185.0f/255.0f alpha:1]];
}
另请参阅this question/answer。
答案 1 :(得分:6)
您不应该测试操作系统的版本。
相反,您应该测试该功能是否可用。
特别是测试UINavigationBar是否响应@selector(appearance)
选择器。
您应该阅读this Apple documentation解释所有内容(尤其是this page)
答案 2 :(得分:1)
这里的答案并不完全正确。如果我们讨论的是向后兼容的API,那么它们是正确的,您不需要在运行时检查版本号。但就iOS而言,现实情况是,有些情况需要,因为Apple不仅仅按照您的预期添加功能,在新版本发布时,它们偶尔会以不兼容的方式改变现有功能。
UIViewController的parentViewController:
是一个很好的例子在iOS 5.0之前,如果视图没有父视图控制器并且正在呈现,则将返回呈现视图控制器。在iOS 5上,不再出现此行为。
在这种情况下,您在运行时检查版本的方式很好。
答案 3 :(得分:-1)
我对此并不十分肯定,但你也可以这样做..
Click on your **project**->go to **info**-> go to **build** section-> in that go to **Deployment** section->then **IOS deployment** section choose the **deployment target** you want and save and run...
希望它可以帮助你...... :)