2013-08-23 44 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