Как OS X загружает приложение на основе раскадровки и как оно управляет окнами?

Я работаю над совершенно новым приложением для OS X и выбрал смелый путь работы с несколькими технологиями, которыми раньше не пользовался. (Я разработчик iOS.)

Я использую раскадровки, Swift и Core Data в своем приложении, все из шаблона XCode. Когда мое приложение запускается, оно создает NSWindowController из раскадровки.

В другом приложении OS X, которое я сделал в Objective-C, я использую метод делегата applicationShouldHandleReopen:hasVisibleWindows: сказать оконному контроллеру открыть окно оконного контроллера.

Я знаю, что семантика языка остается неизменной в Swift, но Core Data и раскадровки оставляют мне два вопроса.

  1. Меняет ли тот факт, что мой проект использует Core Data, на "документное приложение" и, следовательно, на способ управления окнами?

  2. В моем старом проекте я использую перья вместо раскадровок. Кажется, я вручную создаю экземпляр NSWindowController там, и используя его для управления повторным открытием. Если есть способ добраться до того, что мой Раскадровка, несомненно, делает для меня, это было бы оптимально, верно? Можно ли просто подключить розетку к моему делегату приложения? Есть другое соглашение?

1 ответ

Решение
  1. Нет. Проверка "Создание приложения на основе документа" - вот что сделало его приложением на основе документа. Решение об использовании Core Data принимается отдельно.

  2. Раскадровка, которую вы получаете, когда создаете приложение для 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.

(Может кто-нибудь сказать мне, ПОЧЕМУ документ создается? Я не вижу, что на самом деле вызывает его создание)

Другие вопросы по тегам