2015-04-09 10 views
57

Nel nuovo Xcode 6.3 ottengo questo avvertimento:XCode 6.3 Attenzione: sintetizzare proprietà

Auto sintesi proprietà non sarà sintetizzare proprietà 'homeInt'; sarà implementato dalla sua superclasse, usare @dynamic per confermare l'intenzione

Come posso rimuoverlo?

risposta

55

Ho semplicemente rimosso questa dichiarazione di proprietà, perché è già stato dichiarato nella classe genitore

98

Se si sta ignorando l'stessa proprietà dalla classe Super apposta:

@implementation MyClass 

@dynamic homeInt; 

... 

In caso contrario, rinominare il proprietà.

+9

Dovrebbe essere una risposta accettata –

3

questa causa per classe bambino definire lo stesso nome di proprietà di override alla classe genitore, come ad esempio:
1) classe figlia "AFHTTPSessionManager" hanno definire:

@property (nonatomic, strong) AFHTTPResponseSerializer <AFURLResponseSerialization> * **responseSerializer**; 

2) classe genitore "AFURLSessionManager" avere definire :

3) causa da sopra, avviso vieni! se vuoi rimuoverlo, basta rinominare il nome della proprietà del conflitto!
4) o come suggerisce, aggiungere "@dynamic homeInt" nel proprio file di implementazione;

+0

vedo le stesse avvertenze per AFNetworking. La domanda è, questi sono qualcosa di cui preoccuparsi? Hanno anche bisogno di attenzione per questa libreria –

+2

che ha risolto! https: // GitHub.it/AFNetworking/AFNetworking/commit/3fc8071582dfa552cb06b0dc7f1104c6bf5301f1 @BradThomas – zmingchun

+1

Sono contento di non essere l'unico a terminare accidentalmente frasi con un punto e virgola; – hyperspasm

5

Se si vuole evitare di aggiungere @dynamic <varName> ogni luogo che avete sovrascritto proprietà di una classe di super-intenzionalmente, è possibile aggiungere il flag -Wno-objc-property-synthesis a "Altri segnali di avvertimento" sotto i vostri progetti costruire impostazioni. Ciò sopprimerà l'avviso di tutto il progetto.

+0

Questo non sta eliminando gli avvertimenti per me ... Sto usando Cocoapods, non sono sicuro se questo sta annullando le mie bandiere. – AnthonyM

+0

-Wno-objc-property-synthesis non funziona per me per sopprimere questo avviso. Qualcun altro ha idee? –

+0

Lasciatemi precisare. Non funziona quando lo metto in linea con il codice con "#pragma clang diagnostic ignored", ma funziona quando lo metto con i flag del compilatore. Preferirei non renderlo generale su tutto il mio codice con i flag del compilatore ... –

0

Se si è aggiornato a Xcode 6.3, è sufficiente aggiornare AFNetworking alla versione 2.5.2 e questi avvisi dovrebbero scomparire.

+1

Questo è corretto per gli avvisi derivanti dalle proprietà AFNetworking. La domanda originale non riguardava però uno di quelli. – ecotax

9

In seguito al commento di @ mplace, nel mio caso stavo ignorando la proprietà per perfezionare il tipo di proprietà in una sottoclasse della classe originale della proprietà. Quindi, ho avuto bisogno della sovrascrittura @property.

Ecco quello che sto usando:

#pragma clang diagnostic push 
#pragma clang diagnostic ignored "-Wobjc-property-synthesis" 
// superclass type for currentValue was "id" 
@property (nonatomic, strong) NSDate *currentValue; 
#pragma clang diagnostic pop 

Si noti che si tratta di "-Wobjc-proprietà-sintesi" e non "-Wno-objc-proprietà-sintesi"

Vedi anche https://github.com/couchbase/couchbase-lite-ios/issues/660

0

@implementation Myclass

@synthesize homeInt = _ homeInt; ...

@end