Я знаю, что исходный вопрос был для Objective-C, но для других, использующих Swift, могут помочь протоколы. Основная концепция может быть применена и в Objective-C.
Вместо того, уходящие к контроллеру окна, вы можете использовать инъекции зависимостей:
1) Создать document
свойства на контроллере окна и любое представление контроллерах, которые должны получить доступ к документу (или использовать representedObject
свойства, уже существует). Чтобы сделать это проще, вы можете использовать протокол для определения свойства документа или для присвоения свойства representedObject
вашему типу документа, если вы идете по этому маршруту. Сделать все контроллеры представлений, которым необходимо получить доступ к документу, принять этот протокол.
protocol DocumentAccessing {
var document: MyDocument? { get set } // could also use an implicitly unwrapped optional if the document is required to be set for the app to function
}
2) В makeWindowControllers()
методы вашего документа подкласса, после создания контроллера окна, установите его свойство документа самостоятельно (как это документ).
- (void)makeWindowControllers {
MyWindowController *windowController = MyWindowController()
windowController.document = self;
[self addWindowController:windowController];
}
3) Внутри вашего окно контроллера подкласса, после создания экземпляра контроллеров просмотра, установите свойство документа контроллера представления в свойство документа контроллера окна.
4) Теперь, когда ваш контроллер просмотра загружен, его свойство документа должно быть заполнено.
как вы реализуете NS-Document® '-makeWindowControllers'? call '-addWindowController:' как шаблон по умолчанию? – bluedome
да реализовано как follwos: - (void) makeWindowControllers { // Переопределить, чтобы вернуть имя файла раскадровки документа. [self addWindowController: [[NSStoryboard storyboardWithName: @ "Main" bundle: nil] instantiateControllerWithIdentifier: @ "Контроллер окна документа"]]; } – Martin
где вы помещаете код '[self.view.window.windowController document]' в подкласс NSViewController? – bluedome