Я разрабатываю приложение для Mac с Xcode 10 (бета-версия), и у меня возникла проблема с контроллером окна настроек.
У меня в Main.storyboard есть NSWindowController пользовательского класса PreferenceWindowController с панелью инструментов. Вот его соединения:
Вот полный класс:
class PreferenceWindowController: NSWindowController, NSWindowDelegate {
@IBAction func didClickAuthor(_ sender: Any) {
print("author")
}
@IBAction func didClickTypo(_ sender: Any) {
print("typo")
}
override func windowDidLoad() {
super.windowDidLoad()
}
func windowWillClose(_ notification: Notification) {
print("willClose")
}
}
Окно запускается через класс AppDelegate с помощью этого кода:
let storyboard = NSStoryboard(name: "Main",bundle: nil)
if let wc = storyboard.instantiateController(withIdentifier: "PreferenceWindowController") as? PreferenceWindowController
{
wc.showWindow(self)
}
Окно открывается как положено, с кликабельной панелью инструментов, но никакие функции из PreferenceWindowController не вызываются вообще, ни закрытие окна, ни клики по панели инструментов.
Я проверил каждое соединение, каждое имя класса, и я действительно не знаю, что не так...
РЕШЕНИЕ
Решение состоит в том, чтобы сохранить класс PreferenceViewController внутри класса AppDelegate в качестве переменной.
Мое решение:
var preferenceWindowController:PreferenceWindowController? = nil
@IBAction func clickPreferences(_ sender: Any) {
if let wc = storyboard.instantiateController(withIdentifier: "PreferencesWindowController") as? PreferenceWindowController {
let window = wc.window
preferenceWindowController = wc
wc.showWindow(self)
}
}
Спасибо за помощь !
wc
из-за отсутствия строгой ссылки? - person Willeke   schedule 10.07.2018