Константа в target-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 {
}

И я хотел бы получить к ним доступ из класса 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' undeclared (первое использование в этой функции)

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

Спасибо

7
задан Community 20 September 2016 в 18:50
поделиться

2 ответа

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];
19
ответ дан 6 December 2019 в 08:40
поделиться

В файле .h:

extern NSString * const MIN_INTERVAL_KEY;

В одном (!) Файле .m:

NSString * const MIN_INTERVAL_KEY = @"MIN_INTERVAL_KEY";

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

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

2
ответ дан 6 December 2019 в 08:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: