2010-08-18 24 views
6

Ich möchte einige konstante Schlüssel für meine Anwendung hinzufügen, diese Konstanten können überall im Programm zugegriffen werden. So erkläre ich die Konstanten in Schnittstellendatei:Konstante in objective-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 { 
} 

Und ich möchte sie von der MinIntervalViewController Klasse zuzugreifen:

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

Aber die Anwendung zeigt einen Fehler in der MinIntervalViewController Klasse:

Fehler: 'MIN_INTERVAL_KEY' nicht deklariert (erste Verwendung in dieser Funktion)

Vermisse ich etwas? Jede Hilfe wäre willkommen.

Dank

+0

möglich Duplikat [Konstanten in Objective C] (http://stackoverflow.com/questions/538996/constants-in-objective-c) – BadPirate

Antwort

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 

zu benutzen:

#import "Constants.h" 

Dann rufen Sie einfach an die spezielle Variable, die Sie verwenden möchten.

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

Jede Zeile mit einem @ beginnen oder} in Ihrem Code sein kann entfernt, IMHO :-) Es ist wirklich nicht notwendig, hier eine Klasse zu definieren. – DarkDust

+0

Das könnte stimmen, aber wenn die Klassensyntax beibehalten wird, wird die Datei konsistent mit jedem anderen Header/Implementierungspaar in einer Anwendung. Jedem das Seine. –

2

In der H-Datei:

extern NSString * const MIN_INTERVAL_KEY; 

In einer .m-Datei (!):

NSString * const MIN_INTERVAL_KEY = @"MIN_INTERVAL_KEY"; 

Und wie es schien, die Sie verpasst zu haben, ist tatsächlich import die Header-Datei deklariert MIN_INTERVAL_KEY ;-) Also, wenn Sie es in SmokingViewController.h deklariert, aber gerne in MinIntervalViewController.m verwenden, dann müssen Sie import "SmokingViewController.h" in Ihrem MinIntervalViewController.m. Da Objective-C wirklich mehr oder weniger eine Erweiterung von C ist, gelten alle C-Sichtbarkeitsregeln.

Auch was hilft, solche Dinge zu debuggen, ist mit der rechten Maustaste auf die .m-Datei in Xcode und wählen Sie "Preprocess". Dann sehen Sie den Dateivorprozess, d. H. Nachdem CPP seine Arbeit erledigt hat. Dies ist, was der C-Compiler WIRKLICH verdaut.