2010-08-18 5 views
6

Je voudrais ajouter quelques clés constantes pour mon application, ces constantes peuvent être accédées n'importe où dans le programme. Je déclare donc les constantes dans le fichier d'interface:Constante dans l'objectif-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 { 
} 

Et je voudrais y accéder de la classe MinIntervalViewController:

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

Mais l'application affiche une erreur dans la classe MinIntervalViewController:

erreur: 'MIN_INTERVAL_KEY' non déclaré (première utilisation dans cette fonction)

Quelque chose me manque? Toute aide serait appréciée.

Merci

+0

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

Répondre

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 

Pour utiliser:

#import "Constants.h" 

Ensuite, appelez simplement la variable spécifique que vous souhaitez utiliser.

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

Chaque ligne commençant par un @ ou} dans votre code peut être enlevé, à mon humble avis :-) Il n'est vraiment pas nécessaire de définir une classe ici. – DarkDust

+0

Cela peut être le cas, mais en laissant la syntaxe de la classe en place, le fichier reste cohérent avec tous les autres en-têtes/paires d'implémentations d'une application. À chacun son propre. –

2

Dans le fichier .h:

extern NSString * const MIN_INTERVAL_KEY; 

Dans un fichier .m (!):

NSString * const MIN_INTERVAL_KEY = @"MIN_INTERVAL_KEY"; 

Et ce que tu avais l'air d'avoir manqué est à la réalité import fichier d'en-tête déclarant MIN_INTERVAL_KEY ;-) Donc si vous l'avez déclaré en SmokingViewController.h mais que vous voulez l'utiliser en MinIntervalViewController.m, alors vous devez import "SmokingViewController.h" dans votre MinIntervalViewController.m. Puisque Objective-C est en réalité plus ou moins une extension de C, toutes les règles de visibilité C s'appliquent.

En outre, ce qui aide à déboguer des choses de ce genre est de faire un clic droit sur le fichier .m dans Xcode et de sélectionner "Pré-traiter". Ensuite, vous voyez le prétraitement du fichier, c'est-à-dire après que le CPP a fait son travail. C'est ce que le compilateur C est en train de digérer.