У меня есть класс ToolbarManager
, который наследуется от NSObject
.Он имеет свойство toolbar
, определенное следующим образом:
@objc dynamic let toolbar: NSToolbar
В инициализаторе моего класса я вызываю следующий код:
init(toolbar: NSToolbar) {
self.toolbar = toolbar
toolbar.allowsUserCustomization = true
observation = observe(\.toolbar.customizationPaletteIsRunning, options: [.old, .new]) {
(_, change) in
print("was running: \(change.oldValue)")
print("is running: \(change.newValue)")
}
}
, где observation
- это другое определенное свойствоследующим образом:
var observation: NSKeyValueObservation?
Когда я запускаю приложение и выбираю Настроить панель инструментов ... или закрываю представление настройки, закрытие наблюдения никогда не вызывается, и, таким образом, ничего не печатается вconsole.
Почему?
(И как я могу это исправить?)
Редактировать:
Документация Apple states:
Вы можете использовать наблюдения значения ключа только с классами, которые наследуются от NSObject
.
Я не уверен, как это понять.Означает ли это, что можно наблюдать какое-либо свойство, определенное в NSObject
подклассах, или это означает, что можно отслеживать только свойства, которые являются NSObject
подклассами?
(Последнее объясняет, почему мой код не работаетно тогда этот пример , который наблюдает простую строку Swift, также не будет работать. И он работает .)