2013-06-04 52 views
5

在Objective C中的參數錯誤有以下代碼標記爲過時的方法:一些關於屬性

__attribute__((unavailable("message text")));

此代碼已建議hereherehere,可能在幾個地方是我現在無法回想起我的頭頂。

我無法編譯此代碼。我得到的編譯器錯誤是「爲'不可用'屬性指定的錯誤數量的參數」。對於不贊成使用的屬性,同樣的錯誤。如果我刪除它編譯的字符串,但我想知道如何編譯的字符串。由於它已經被多個人單獨提出並且甚至被高估,所以它必須是工作代碼。但我似乎無法編譯它。

我在做什麼錯?如何使這個編譯?

+0

請嘗試使用'UNAVAILABLE_ATTRIBUTE'。它在Apple的頭文件中定義,以及'DEPRECATED_ATTRIBUTE'。 – Greg

+0

是的,謝謝。我也嘗試過,也沒有效果。但我的問題不是關於如何通常廢棄方法,而是如何編譯這一行代碼。 –

+0

我開始認爲儘管擁有這些屬性,但不可能棄用方法。他們似乎沒有效果。咩。 –

回答

1

在我的搜索中,我找到了關於此的clang文檔; Clang Language Extensions

我的Xcode版本是4.6.2,我嘗試了沒有ARC的LLVM-gcc,以確保gcc編譯器仍然可以使用擴展。

我的C/C++/Objective-C選項的編譯器是; LLVM GCC 4.2和Apple LLVM編譯器。

這兩個屬性都在.h頭文件中。無論LLVM GCC和蘋果LLVM採取這兩種風格

-(void)oldMethod __attribute((deprecated())); 
//or 
-(void)oldMethod2 DEPRECATED_ATTRIBUTE; 

LLVM GCC抱怨以下方法格式,其中蘋果LLVM工作正常(這實際上回答你的問題。你的編譯器使用LLVM GCC或較舊的版本)

-(void)oldMethod __attribute((deprecated("Don't use Old Method"))); 

長話短說,一定要保持備份,然後再進行這些構建設置和更改。

  1. 檢查適當的Xcode運行(4.6.2是最新的),我結束了的版本不同的雜波和不得不做清理。

  2. 檢查「Build Options」下項目設置中的哪些編譯器版本可用。 (我指出上面的答案)

  3. 對於較老的項目,您可能需要檢查使用ARC進行重構並轉換爲現代objective-c。只要確保備份,在較大的項目中可能會很麻煩。 (Edit-> Refactor-> Modern Objective-C) Videos; WWDC 2011重構與自動引用計數 WWDC 2012現代Objective-C的影片https://developer.apple.com/videos/wwdc/2012/

    注:現代Objective-C的重構將變爲蘋果LLVM編譯器。隨着其他變化。

如果這個答案成爲你的問題的核心,請幫助我投票! TIA!