2012-04-11 8 views
6

私はちょうど答えを見てきましたhereしかし助けていませんでした。コンパイラがAttributes on method implementation and its declaration must matchと言うよりも、メソッドの宣言だけに非推奨の属性を追加します。メソッドの実装にsmthを追加する必要がありますか?Xcode 4のメソッドを正しく非難する方法

ありがとうございます!

答えて

13

だけ宣言に属性を追加します。

@interface Blah 
- (void)method __attribute__((deprecated)); 
@end 

あなたが翻訳のために適切である、これは正常に動作する必要があります含まれて提供されます。おそらく、の定義に属性を追加しましたが、の宣言はではありませんか?それ以外の場合は、デモンストレーション(コードサンプル)が役立ちます。

更新

上記のアプローチは、一般的なメッセージのために動作しますが、打ち鳴らすがIBAction秒で混乱します表示されます。

clangを使用すると、ibactionの属性が暗黙的に挿入されます(以前はtypedefだった)。属性は宣言で指定され

のみ、プリプロセッサの出力は次のとおりです。

// preprocessed declaration 
- (void)__attribute__((ibaction))setSomething:(id)sender __attribute__((noreturn)); 
// preprocessed implementation 
- (void)__attribute__((ibaction))setSomething:(id)sender 
...  

だから、コンパイラはちょうどこの隠された装飾で混乱している表示され、あなたはまたに属性を追加する必要がありますメソッドがIBActionであるときの警告を抑制する実装/定義。

+0

これは動作しません! –

+0

私のマシンで動作;)あなたのコードを投稿してください! – justin

+0

- (IBAction)showTag __attribute __((非推奨)); 私はこれを得ます:メソッド実装の属性とその宣言は一致しなければなりません。 –

0

少なくとも、Xcode 4.3.2ではclangを使用して、メソッドの宣言と実装の両方にdeprecated属性を設定する必要があります。

+0

これは正しいです。しかし、なぜ? –

+0

Shrug。私はgccよりもclangで違う方法で実装したと思います。 –