2012-04-11 10 views
6

Właśnie przejrzałem odpowiedzi here, ale nie pomogłem. Kiedy dodaję nieaktualny atrybut tylko do deklaracji metody niż kompilator mówi Attributes on method implementation and its declaration must match. Czy muszę dodać coś do implementacji metody?Jak poprawnie wycofać metodę z Xcode 4

Dzięki!

Odpowiedz

13

Wystarczy dodać atrybut do deklaracji:

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

przydzieliła Ci obejmuje są poprawne tłumaczenia, to powinno działać dobrze. Być może dodałeś atrybut do definicji, a nie do deklaracji ? W przeciwnym razie pomocna byłaby demonstracja (przykład kodu).

Aktualizacja

Chociaż powyższe podejście działa dla typowych komunikatów wydaje się, dzyń pogubi z IBAction s.

Przy użyciu klanu atrybuty są wstawiane domyślnie (dla tego, co poprzednio było typedef).

Gdy atrybut jest określona w deklaracji tylko wyjście preprocesor jest następująca:

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

Więc wydaje się, że kompilator jest tylko zdezorientowany tym ukrytym dekoracji, a trzeba też dodać atrybut do implementacja/definicja, aby wyłączyć ostrzeżenie, gdy metoda jest IBAction.

+0

To nie działa! –

+0

Działa na moim komputerze;) Zamieść swój kod! – justin

+0

- (IBAction) showTag __attribute __ ((przestarzałe)); Rozumiem: Atrybuty dotyczące implementacji metody i jej deklaracji muszą być zgodne. –

0

Musisz umieścić nieaktualny atrybut zarówno na deklaracji, jak i na metodzie, przynajmniej w Xcode 4.3.2 z klangiem.

+0

Zgadza się. Ale dlaczego? –

+0

Wzruszając ramionami. Sądzę, że zaimplementowali to inaczej w klangu niż w gcc. –