2011-08-01 17 views
5

¿Cómo hacer una macro que represente un valor de NSString constante? Me estoy poniendo "carácter multi-carácter constante" y "Carácter constante demasiado tiempo para su tipo" advertencias cuando se define en Xcode 4:¿Cómo hacer macro NSString?

#define LEVELTYPEGLASS @"Glass" 

¿Es necesario escapar algo?

+1

Es correcto. ¿Cómo exactamente lo estás usando? – sidyll

+0

Funciona bien para mí. – iandotkelly

+0

revise su ortografía, si hay caracteres '@' y si usa comillas dobles dobles. Probablemente puede hacerlo por error tipográfico, o díganos dónde coloca este código. –

Respuesta

3

Evitar el uso de define constantes de cadena. Definen como un externo en el archivo de cabecera de esta manera:

extern NSString * const MYLevelTypeGlass; 

Y a implementar en cualquier archivo de implementación:

NSString * const MYLevelTypeGlass = @"Glass"; 

Esto le da un poco más caracteres para escribir, pero añade adjudicar de beneficios como una mejor tipificación para Xcode, identidad de objeto garantizada (sin cadenas duplicadas). Así es como lo hace Apple, si es lo suficientemente bueno para ellos, debería ser bueno para ti.

+0

Hm, los frenos solución mis convenciones de trabajo un poco :(En la actualidad, todos mis macros residen en un archivo de cabecera macro que se incluye de forma automática en todas mis clases personalizadas. – Centurion

+0

¿Le importaría ?. explicar por qué debemos evitar simplemente utilizando un definen a hacer esto sin cuestionar, sólo curiosidad – iandotkelly

+0

las mismas razones que he mencionado; Xcode y el compilador obtienen mejores tipos de manejo (por refactorización por ejemplo), y la igualdad Usted puede hacer 'foo =. = MYLevelTypeGlass' en el código y es seguro – PeyloW

1

La solución sugerida por PeyloW es grande. Pero solo quiero señalar que conseguí que la solución funcionara después de haber agregado #import "Foundation/Foundation.h" al archivo de encabezado. Por lo que el archivo de cabecera constants.h debe verse como:

#import "Foundation/Foundation.h" 

extern NSString * const LEVELTYPEGLASS; 
#define IMAGECOUNT 5 
... 

Entonces, archivo de implementación se parece a:

#import "Constants.h" 

NSString * const LEVELTYPEGLASS = @"Glass"; 

Y si es necesario incluir en el proyecto de que todo lo que necesita para importar en que -prefix .pch archivo:

#import "Constants.h" 

en ese caso, todas las definiciones de macros reside en el archivo de cabecera constants.h, y algunas constantes NSString reside en el archivo de aplicación Constants.m. De nuevo, gracias a PeyloW :)

Cuestiones relacionadas