2010-08-18 21 views
6

Me gustaría agregar algunas claves constantes para mi aplicación, se puede acceder a estas constantes desde cualquier lugar del programa. Por lo tanto declaro las constantes en el archivo de interfaz:Constante en objetivo-c

#import <UIKit/UIKit.h> 
NSString * MIN_INTERVAL_KEY = @"MIN_INTERVAL_KEY"; 
NSString * MAX_TOBACCO_KEY = @"MAX_TOBACCO_KEY"; 
NSString * ICON_BADGE = @"ICON_BADGE"; 

@interface SmokingViewController : UIViewController { 
} 

Y me gustaría acceder a ellos desde la clase MinIntervalViewController:

- (void)viewDidAppear:(BOOL)animated { 
    NSUserDefaults *user = [NSUserDefaults standardUserDefaults]; 
    if (user) { 
     self.selectedValue = [user objectForKey:MIN_INTERVAL_KEY]; 
    } 
    [super viewDidAppear:animated]; 
} 

embargo, la aplicación muestra un error en la clase MinIntervalViewController:

error: 'MIN_INTERVAL_KEY' no declarado (primer uso en esta función)

¿Echo de menos algo? Cualquier ayuda sería apreciada.

Gracias

+0

posible duplicado de [Constantes en Objective C] (http://stackoverflow.com/questions/538996/constants-in-objective-c) – BadPirate

Respuesta

18

constants.h

#import <Cocoa/Cocoa.h> 

@interface Constants : NSObject { 

} 

extern int const kExampleConstInt; 
extern NSString * const kExampleConstString; 

@end 

Constants.m

#import "Constants.h" 


@implementation Constants 

int const kExampleConstInt = 1; 
NSString * const kExampleConstString = @"String Value"; 

@end 

de usar:

#import "Constants.h" 

A continuación, sólo tiene que llamar a la variable específica que desea utilizar.

NSString *newString = [NSString stringWithString:kExampleConstString]; 
+0

Cada línea de salida con una @ o} en su código puede ser eliminado, en mi humilde opinión :-) Realmente no hay necesidad de definir una clase aquí. – DarkDust

+0

Esto podría ser cierto, pero dejar la sintaxis de clase mantiene el archivo coherente con cada otro encabezado/par de implementación en una aplicación. A cada cual lo suyo. –

2

En el archivo .h:

extern NSString * const MIN_INTERVAL_KEY; 

En un archivo .m (!):

NSString * const MIN_INTERVAL_KEY = @"MIN_INTERVAL_KEY"; 

Y lo que parecía haber perdido es a la realidad import archivo de encabezado que declara MIN_INTERVAL_KEY ;-) Entonces, si lo declaró en SmokingViewController.h pero desea usarlo en MinIntervalViewController.m, entonces necesita import "SmokingViewController.h" en su MinIntervalViewController.m. Dado que Objective-C es realmente más o menos una extensión de C, se aplican todas las reglas de visibilidad de C.

Además, lo que ayuda a depurar cosas como esa es hacer clic derecho en el archivo .m en Xcode y seleccionar "Preprocesar". Luego verá el archivo preprocesado, es decir, después de que CPP haya hecho su trabajo. Esto es lo que el compilador de C REALMENTE está digiriendo.