如何在不破坏应用程序的情况下仅针对iOS 5执行代码

时间:2011-10-27 07:53:01

标签: iphone objective-c xcode ios5

如何仅针对具有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时忽略它?

4 个答案:

答案 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...

希望它可以帮助你...... :)