Typhoon: внедрение контроллеров из раскадровки OS X

У меня есть чистый проект OS X в Xcode (OS X, Swift, Storyboards). Info.plist имеет следующую конфигурацию

введите здесь описание изображения

Вот конфигурация для контроллера представления в MyAssembly.sift

public dynamic func viewController() -> AnyObject {
    return TyphoonDefinition.withClass(ViewController.self){
        (definition: TyphoonDefinition!) in
            definition.injectProperty("name", with: "TEST INJECTED")
    }
}

вот мой ViewController.swift:

import Cocoa

@objc
class ViewController: NSViewController {
    var name:String?
}

Я добавил NSTextField в представление и привязал его значение к свойству name ViewController.

По документации должно работать, но не работает.

Когда я пытаюсь выполнить print(NSStoryboard(name: "Main", bundle: NSBundle.mainBundle())) в методе AppDelegate.applicationDidFinishLaunching, он печатается как <NSStoryboard: 0x600000001280>, поэтому это не экземпляр TyphoonStoryboard.

Если я добавлю typhoonKey к пользовательским атрибутам времени выполнения на ViewController, как это

введите здесь описание изображения

сообщение об ошибке «Не удалось установить (typhoonKey) определенное пользователем проверенное свойство в (Typhon_Test_Delete.ViewController): [ setValue: forUndefinedKey:]: этот класс не соответствует кодированию значения ключа для ключа typhoonKey». печатается.

Любые идеи, что я делаю неправильно?

Может быть, Тайфун ищет UIMainStoryboardFile, но в данном случае у нас есть NSMainStoryboardFile?


person Vladimir Prudnikov    schedule 17.12.2015    source источник


Ответы (2)


Вы правы, в настоящее время Typhoon не обеспечивает интеграцию раскадровки с OSX, только с iOS. На iOS Тайфун:

  • Проверяет TyphoonConfig в plist ваших приложений при запуске. Если он найден вместе с деталями раскадровки (UIMainStoryboardFile), он настроит приложение, чтобы гарантировать, что эта раскадровка является экземпляром TyphoonStoryboard.

Работа над поддержкой этой OSX была начата, однако не была завершена из-за небольшого спроса. Покончить с этим не составит особого труда.

А пока вы можете:

  • Вручную создайте экземпляр TyphoonStoryboard и используйте его.
  • Вызвать [factory inject:controller] после создания экземпляра.
person Jasper Blues    schedule 17.12.2015
comment
Я замечаю, что TyphoonStoryboard недоступен (может быть, только в Swift?). - person Vladimir Prudnikov; 17.12.2015
comment
Хм. Да, он должен отсутствовать в заголовках Swift. Кажется, здесь есть над чем поработать. - person Jasper Blues; 18.12.2015

Проблема с тайфуном «Поддержка NSStoryboard на OSX» https://github.com/appsquickly/Typhoon/issues/ 558

person Sergey Sergeyev    schedule 03.05.2017