2010-08-18 17 views
6

Vorrei aggiungere alcune chiavi costanti per la mia applicazione, queste costanti sono accessibili ovunque nel programma. Quindi dichiaro le costanti nel file di interfaccia:Costante in ogg-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 { 
} 

E vorrei accedervi dalla classe MinIntervalViewController:

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

Ma l'applicazione mostra un errore nella classe MinIntervalViewController:

errore: "MIN_INTERVAL_KEY" non dichiarato (primo utilizzo in questa funzione)

Mi manca qualcosa? Qualsiasi aiuto sarebbe apprezzato.

Grazie

+0

possibile duplicato del [Costanti in Objective C] (http://stackoverflow.com/questions/538996/constants-in-objective-c) – BadPirate

risposta

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 

Per utilizzare:

#import "Constants.h" 

Quindi, è sufficiente chiamare il variabile specifica che si desidera utilizzare.

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

Ogni riga che inizia con un @ o} nel codice può essere rimosso, IMHO :-) Non c'è davvero bisogno di definire una classe qui. – DarkDust

+0

Questo potrebbe essere vero, ma lasciare la sintassi della classe mantiene il file coerente con ogni altra coppia di intestazione/implementazione in un'applicazione. A ognuno il suo. –

2

Nel file .h:

extern NSString * const MIN_INTERVAL_KEY; 

In un unico file .m (!):

NSString * const MIN_INTERVAL_KEY = @"MIN_INTERVAL_KEY"; 

E che cosa ti sembrava di aver perso è quello di realtà import il file di intestazione che dichiara MIN_INTERVAL_KEY ;-) Quindi, se lo hai dichiarato in SmokingViewController.h ma ti piace usarlo in MinIntervalViewController.m, allora hai bisogno di import "SmokingViewController.h" nel tuo MinIntervalViewController.m. Poiché Objective-C è in realtà più o meno un'estensione a C, si applicano le regole di visibilità di C.

Inoltre, ciò che aiuta a eseguire il debug di cose del genere è fare clic con il tasto destro del mouse sul file .m in Xcode e selezionare "Preprocesso". Quindi vedi il file preelaborato, cioè dopo che CPP ha fatto il suo lavoro. Questo è ciò che il compilatore C REALMENTE sta digerendo.