2013-08-23 39 views
5

我正在创建一个黑暗主题的iOS 6和7应用程序。据我所知,我可以拨打[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];使iOS 7状态栏适用于深色主题应用程序。#ifdef #else #endif选择iOS sdk版本和功能?

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

我试图用#ifdef ... #else ...... 这个代码是[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];viewDidLoad内做到这一点。

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

非常感谢!!!!

+1

我只是回答了这个位置:http://stackoverflow.com/questions/18404746/disable-clang-error-with-pragma/18406309#18406309 – rmaddy

+0

我只是解决我的问题。谢谢 – HYC

+0

我的朋友,苹果不会接受由xcode版本低于5所做的任何构建。所以尝试使用xcode 5及更高版本。 –

回答

20

虽然我不是100%确定,但我可以完全回答这个问题而不违反NDA,我会尽我所能为您指出正确的方向。

您需要使用__IPHONE_*#定义在Availability.h

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_6_0 
    // iOS 6+ code here 
#else 
    // Pre iOS 6 code here 
#endif 

请注意:#if#ifdef将确定哪些代码被编译,它不是一个运行时的检测机制。

您可以使用“快速打开”和键入可用性来轻松访问Availability.h。

+0

答案中没有任何内容由NDA覆盖。你为什么那么想?只涉及iOS 7特定的API。 – rmaddy

+0

当然,在iOS 7 SDK中提供的Availability.h的内容是否包含在NDA中?无论这个答案应该能够轻松适应iOS 7,甚至无需查看头文件。我+1了,并通过其他答案:) –

2

看看到respondsToSelector

[delegate respondsToSelector:@selector(myMethod:)] 
+3

这没有帮助。编译器仍然会在实际调用该方法的行上投诉。 – rmaddy

+0

如果接收者的类型为'id'或者您使用'performSelector:withObject:',则不会。无论如何,上面的#if方法可能更加整洁。 – jbg