Константа в объективе-с - PullRequest
7 голосов
/ 18 августа 2010

Я хотел бы добавить несколько константных ключей для моего приложения, эти константы могут быть доступны в любом месте программы.Поэтому я объявляю константы в файле интерфейса:

#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 {
}

И я хотел бы получить к ним доступ из класса MinIntervalViewController:

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

Но приложение показывает ошибку в классе MinIntervalViewController:

ошибка: «MIN_INTERVAL_KEY» необъявлен (первое использование в этой функции)

Я что-то пропустил?Любая помощь будет оценена.

Спасибо

Ответы [ 2 ]

19 голосов
/ 18 августа 2010

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

Чтобы использовать:

#import "Constants.h"

Затем просто вызовите конкретную переменную, которую вы хотите использовать.

NSString *newString = [NSString stringWithString:kExampleConstString];
2 голосов
/ 18 августа 2010

В файле .h:

extern NSString * const MIN_INTERVAL_KEY;

В одном (!) .M файле:

NSString * const MIN_INTERVAL_KEY = @"MIN_INTERVAL_KEY";

И то, что вы, казалось, упустили, это на самом деле importзаголовочный файл, объявляющий MIN_INTERVAL_KEY ;-) Так что если вы объявили его в SmokingViewController.h, но хотели бы использовать его в MinIntervalViewController.m, то вам нужно import "SmokingViewController.h" в вашем MinIntervalViewController.m.Поскольку Objective-C действительно более или менее является расширением C, применяются все правила видимости C.

Кроме того, для отладки подобных вещей нужно щелкнуть правой кнопкой мыши файл .m в Xcode и выбрать «Preprocess».».Затем вы видите препроцесс файла, т.е. после того, как CPP выполнил свою работу.Это то, что ДЕЙСТВИТЕЛЬНО переваривает компилятор C.

...