2010-07-10 91 views
3

我在StackOverflow上發現了這個問題,但無法解決我的問題。使用不推薦使用的setStatusBarHidden方法時的XCode警告

Calling the appropriate setStatusBarHidden per iOS version

if([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarHidden: withAnimation:)]) 
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO]; 
else 
    [[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO]; 

設置我的操作系統部署目標3.0,但我仍然收到警告「setStatusBarHidden:動畫:被棄用」

我想如果可能的話有沒有警告該項目,而不是一個破解它的黑客。有沒有一種方法可以設置項目來消除此警告?

我已經將項目基礎SDK設置爲4.0。 並將目標Base SDK設置爲4.0,將部署目標SDK設置爲3.0。

我爲「所有配置」

由於事先制定的這些設置

更新:顯然,警告僅出現在模擬器中,設置設備不能當。

+1

在'setStatusBarHidden:withAnimation:'withAnimation:'部分不需要'BOOL',它需要'UIStatusBarAnimation'常量。 [see here](http://developer.apple.com/iphone/library/documentation/uikit/reference/UIApplication_Class/Reference/Reference.html#//apple_ref/occ/instm/UIApplication/setStatusBarHidden%3awithAnimation%3a) – 2010-07-10 11:15:27

+0

謝謝!錯過了那一個! – 2010-07-10 12:30:02

回答

4

棄用警告意味着您正在使用將來不會被支持的內容。此特定語法列爲已棄用here。您通過不使用棄用的方法擺脫了警告。您應該使用setStatusBarHidden:withAnimation:而不是

如果您希望在3.0和3.2+上均支持此功能,則必須根據目標版本編寫條件代碼。關於預處理器宏和函數有一些有用的信息可以幫助您here

+0

但這不適用於OS 3.0設備。它使用OS 3.1.3爲無法識別的選擇器崩潰了我的iPod touch。 – 2010-07-10 10:13:22

+1

我不是Iphone開發者,但是我認爲你必須在通過調用respondsToSelector(從你上面的鏈接)使用它之前檢查是否存在更高版本的特定功能 – 2010-07-10 11:06:19

+0

BTW。現在的答案是正確的。無論如何編輯一些更多的信息。 – 2010-07-10 11:08:40

3

這可能會幫助,如果你開發的較舊的設備,不知道最後一個,但它看起來不錯:

if([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarHidden: withAnimation:)]) 
{ 
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone]; 
} 
else if([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarHidden: animated:)]) 
{ 
    [[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO]; 
} 
else if([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarHidden:)]) 
{ 
    [[UIApplication sharedApplication] setStatusBarHidden:NO]; 
} 

然而,問題就來了,我切換設備從iPhone到通用之後,回到iPhone 。花了一段時間才意識到Deployment Target已更改爲4.3,因此將其更改回3.0會使警告消失。

1

你可以這樣執行它克服在警告一次

#pragma GCC diagnostic ignored "-Wdeprecated-declarations" 
(void) methodUsingDeprecatedStuff { //use deprecated stuff } 

使用過時的東西,每次來避免警告

的#pragma GCC診斷之前,只要貼上這行警告「-Wdeprecated-聲明」

這將刪除警告。

希望它能幫助你。

+0

不要忘記在棄用的代碼之後放置'#pragma clang diagnostic pop'以重新打開警告 – Ander 2013-04-29 06:09:12

相關問題