Закрытие Key-Value-Observing никогда не вызывалось для логического свойства - PullRequest
0 голосов
/ 06 марта 2019

У меня есть класс 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, также не будет работать. И он работает .)

1 Ответ

2 голосов
/ 06 марта 2019

Вы можете использовать наблюдение значения ключа только с классами, которые наследуются от NSObject.

означает, что требуется наблюдать только объекты в подклассе NSObject.

Это не означает, что любой объект в подклассе NSObject является неявно наблюдаемым.

Похоже, что это свойство NSToolbar не совместимо с KVO.

...