NSDocument широкая переменная

Поэтому мне нужен NSDocument с экземпляром бэкэнда, к которому могут обращаться все представления и объекты в бэкэнде. На данный момент у меня есть общий экземпляр, но это ограничивает документ только одним. код просто так:

static id sharedInstance = nil;

+(void)initialize {
    if (self == [ApricumBackend class]) {
        sharedInstance = [[self alloc] init];       
    }
}
+ (id)mainBackend {
    return sharedInstance;
}

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

Важно также то, что объекты в объекте бэкэнда должны иметь доступ к объекту бэкэнда, пока они "инициализируют"

Спасибо

1 ответ

Решение

Для объектов вы создаете общий подкласс NSObject это включает в себя назначенный инициализатор:

+ (id)initWithBackend:(Backend *)backend;

Возможно, назовите это BackendObject, Тогда ваши объекты должны быть подклассом BackendObject и добавьте подходящие методы инициализатора, например:

+ (id)initWithSomething:(Something *)something backend:(Backend *)backend;

Эти методы инициализатора могут затем вызывать инициализатор суперкласса, и объект бэкэнда (который показан на графике как владелец) должен пройти self когда он их инициализирует.

Для представлений вы можете получить доступ к документу из NSView инициализатор подкласса, использующий:

MyDocument *mydoc = [[[self window] windowController] document];

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

Backend *backend = [mydoc backend];
Другие вопросы по тегам