2012-05-03 26 views
6

Attualmente sto usando tre server (deploy, live_testing e local). Sto usando macro per definire una serie di posizioni di dominio:Objective-C Macro ridefinizione

#define __LIVE_TESTING // Here I chose what domain to use 

#ifdef __PRODUCTION 
#define DOMAIN @"http://192.168.10.228/rest/" 
#define DOMAINCOMET @"http://192.168.10.228/" 
#endif 

#ifdef __LIVE_TESTING 
#define DOMAIN @"http://192.168.10.229/rest/" 
#define DOMAINCOMET @"http://192.168.10.229/" 
#endif 

... 

Il problema che sto avendo problemi sono compilatore relative alla ridefinizione del DOMINIO e DOMAINCOMET. C'è una soluzione alternativa per questi avvertimenti?

Grazie in anticipo, Clinton

risposta

11

#undef è tuo amico:

#ifdef __LIVE_TESTING 

    #if defined(DOMAIN) && defined(DOMAINCOMET) 
     #undef DOMAIN 
     #undef DOMAINCOMET 
    #endif 

    #define DOMAIN @"http://192.168.10.229/rest/" 
    #define DOMAINCOMET @"http://192.168.10.229/" 

#endif 
+0

Thanks, questo ha funzionato bene e risolto il mio problema avviso del compilatore iniziale. Ho avuto alcuni altri problemi di ridefinizione dovuti al framework di RestKit da qualche parte usando la stessa macro "DOMAIN". – r1d3h4rd

1

Se hai trovato gli errori di ridefinizione, è necessario essere definendo il più macro di una volta. Se questo codice è l'unica posizione definita da DOMAIN e DOMAINCOMET, è possibile che entrambi i flag di controllo siano impostati.

Questo potrebbe accadere se entrambi __PRODUCTION e __LIVE_TESTING sono definiti a qualsiasi valore - anche 0 dal momento che si sta utilizzando #ifdef per vedere se sono definiti, e non testare il valore effettivo sono assegnati.

Ad esempio, anche:

#define __PRODUCTION 0 
#define __LIVE_TESTING 1 

causerà entrambi i blocchi da valutare in base al codice, e quindi far scattare l'errore di ridefinizione.

caso si desidera i due di essere escludono a vicenda, si dovrebbe verificare il loro valore, in tal modo:

#if __PRODUCTION==1 
#define DOMAIN @"http://192.168.10.228/rest/" 
#define DOMAINCOMET @"http://192.168.10.228/"  
#elif __LIVE_TESTING==1 
#define DOMAIN @"http://192.168.10.229/rest/" 
#define DOMAINCOMET @"http://192.168.10.229/" 
#endif 
Problemi correlati