2013-06-04 18 views
5

In Objective C v'è il seguente codice che contraddistingue i metodi come obsoleti:Numero errato di argomenti per l'attributo

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

Questo codice è stato suggerito here, here e here, possibilmente in un paio di posti che Non riesco a ricordare la parte superiore della mia testa in questo momento.

Non riesco a compilare questo codice. L'errore del compilatore che ottengo è "Numero di argomenti errato specificato per l'attributo 'non disponibile'". Stesso errore per l'attributo deprecato. Se rimuovo la stringa che compila, ma mi piacerebbe sapere come compilarlo con la stringa. Dal momento che è stato suggerito da più persone in modo indipendente ed è stato persino messo in circolazione, deve essere un codice funzionante. Ma non riesco a farlo compilare.

Cosa sto sbagliando? Come si fa a compilare?

+0

Provare a utilizzare "UNAVAILABLE_ATTRIBUTE". È definito nelle intestazioni di Apple da qualche parte, insieme a 'DEPRECATED_ATTRIBUTE'. – Greg

+0

Sì, grazie. Ho provato anche quello, anche senza alcun effetto. Ma la mia domanda qui non riguarda come deprecare i metodi in generale, ma piuttosto come compilare questa linea di codice. –

+0

Sto iniziando a pensare che non sia possibile deprecare i metodi nonostante abbiano gli attributi. Sembrano non avere alcun effetto. Meh. –

risposta

1

Nella mia ricerca, ho trovato la documentazione clang su questo; Clang Language Extensions

La mia versione Xcode è 4.6.2, ho provato LLVM-gcc senza ARC per garantire che il compilatore gcc funzionasse ancora con le estensioni.

Il mio compilatore per le opzioni C/C++/Objective-C sono; LLVM GCC 4.2 e compilatore Apple LLVM.

Entrambi questi attributi si trovano nel file di intestazione .h. Sia GCC LLVM e Apple LLVM prendono questi due stili

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

LLVM GCC lamentato il seguente formato metodo, dove, come Apple ha LLVM ha funzionato correttamente (questo risponde alla tua domanda in realtà. Il compilatore sta utilizzando LLVM GCC o qualcosa di più antico)

Per farla breve, assicurarsi di mantenere un backup prima di andare a pasticciare con queste impostazioni di generazione e modifiche.

  1. Controllare che il Xcode corretta è in funzione (4.6.2 è l'ultima), ho finito con un ingombro di versione diversa e ha dovuto fare pulizia.

  2. Verificare quali versioni del compilatore sono disponibili nelle impostazioni del progetto in "Opzioni di creazione". (Ho indicato la risposta sopra)

  3. Per i progetti precedenti, è possibile controllare il refactoring con ARC e Convert to modern objective-c. Basta essere sicuri di mantenere un backup, su progetti più grandi può essere una seccatura. (Modifica-> Refactor-> Modern Objective-C) Video; WWDC 2011 refactoring con riferimento conteggio automatico WWDC 2012 Video moderna Objective-C https://developer.apple.com/videos/wwdc/2012/

    Nota: moderna Objective-C refactoring cambierà il compilatore LLVM Apple. Insieme ad altri cambiamenti.

Se questa risposta arriva al centro della tua domanda, help me out fino diritto di voto! TIA!

Problemi correlati