Как OS X загружает приложение на основе раскадровки и как оно управляет окнами?
Я работаю над совершенно новым приложением для OS X и выбрал смелый путь работы с несколькими технологиями, которыми раньше не пользовался. (Я разработчик iOS.)
Я использую раскадровки, Swift и Core Data в своем приложении, все из шаблона XCode. Когда мое приложение запускается, оно создает NSWindowController из раскадровки.
В другом приложении OS X, которое я сделал в Objective-C, я использую метод делегата applicationShouldHandleReopen:hasVisibleWindows:
сказать оконному контроллеру открыть окно оконного контроллера.
Я знаю, что семантика языка остается неизменной в Swift, но Core Data и раскадровки оставляют мне два вопроса.
Меняет ли тот факт, что мой проект использует Core Data, на "документное приложение" и, следовательно, на способ управления окнами?
В моем старом проекте я использую перья вместо раскадровок. Кажется, я вручную создаю экземпляр
NSWindowController
там, и используя его для управления повторным открытием. Если есть способ добраться до того, что мой Раскадровка, несомненно, делает для меня, это было бы оптимально, верно? Можно ли просто подключить розетку к моему делегату приложения? Есть другое соглашение?
1 ответ
Нет. Проверка "Создание приложения на основе документа" - вот что сделало его приложением на основе документа. Решение об использовании Core Data принимается отдельно.
Раскадровка, которую вы получаете, когда создаете приложение для OS X Document, немного нетипична. Обратите внимание, что в раскадровке нет стрелки, указывающей, где находится точка входа. То, что происходит, является "Документом". У него есть метод:
override func makeWindowControllers() { // Returns the Storyboard that contains your Document window. let storyboard = NSStoryboard(name: "Main", bundle: nil)! let windowController = storyboard.instantiateControllerWithIdentifier("Document Window Controller") as NSWindowController self.addWindowController(windowController) }
В раскадровке он ищет контроллер с идентификатором @"Document Window Controller" (что и происходит с контроллером окна). Документ содержит коллекцию оконных контроллеров. поэтому Document создает его и добавляет windowController в этот список.
Поэтому Document уже имеет ссылку на оконный контроллер в Document.windowControllers.
(Может кто-нибудь сказать мне, ПОЧЕМУ документ создается? Я не вижу, что на самом деле вызывает его создание)