Глобальная собственность в Цели C - PullRequest
2 голосов
/ 27 декабря 2011

У меня есть enum, определенный в файле Constants.h следующим образом:

typedef enum {
    CalendarTypeMonth = 0,
    CalendarTypeWeek
} CalendarType;

Затем в моем контроллере представления я определяю, каким должен быть тип календаря, и сохраняю его в свойстве следующим образом:

@property (nonatomic) CalendarType myCalendarType;

Теперь я хочу, чтобы все классы в моем проекте имели доступ к типу календаря.Как я могу установить это свойство как глобальное / внешнее, чтобы все классы могли его прочитать?

РЕДАКТИРОВАТЬ: я знаю, что определение перечисления будет доступно по всему проекту.Но меня интересует значение myCalendarType.Как я могу получить доступ к значению myCalendarType во всех классах?

Ответы [ 2 ]

10 голосов
/ 27 декабря 2011

Вы можете объявить метод класса для доступа к статической переменной.

Добавить такой код в ваш файл реализации:

static MyStaticType staticVar = MyStaticTypeDefault;

+(BOOL)myStaticVar
{
    return staticVar;
}

+(void)setMyStaticVar:(MyStaticType)newValue
{
    staticVar = newValue;
}

И создать объявления для этих методов в файле интерфейса.Это намного лучше, чем перемещать все статические значения в AppDelegate.В любом случае, возможно множество вариантов - например, вы можете создать синглет для хранения некоторых настроек приложения или использовать CoreData.

0 голосов
/ 27 декабря 2011

В вашем файле [Project Name] _Prefix.pch вы можете добавить это утверждение:

#import "Constants.h"

При этом вы сделаете свое перечисление доступным для каждого файла в проекте.

EDIT: Чтобы получить доступ к значению, я предлагаю сделать его глобальным свойством вашего делегата приложения. Чтобы продвинуться дальше, вы можете заставить ваше приложение делегировать метод NSObject, используя категорию, чтобы он мог выглядеть примерно так:

CalendarType current = [self appDelegate].currentCalendarType

Обратите внимание, что ваше свойство теперь является глобально получаемым / устанавливаемым свойством.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...