Мне трудно получить NSView
, чтобы наблюдать за изменениями его родителя NSWindow
. Я пробовал это на тестовом проекте с не более чем NSWindow
, который содержит подкласс MyView
от NSView
, просто чтобы узнать, не хватает ли я чего-то.NSView не может наблюдать изменения NSWindow - KVO и Swift
class MyView: NSView {
//add observer on awake from nib
//works fine
override func awakeFromNib() {
if let win = self.window {
win.addObserver(self, forKeyPath: Notification.Name.NSWindowDidBecomeKey.rawValue, options: .new, context: nil)
}
}
//remove observer on dealloc
//allso works fine
deinit {
if let win = self.window {
win.removeObserver(self, forKeyPath: Notification.Name.NSWindowDidBecomeKey.rawValue)
}
}
//never gets called
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
Swift.print(keyPath ?? "")
Swift.print("worked!")
}
override func draw(_ dirtyRect: NSRect) {
NSColor.blue.set()
NSBezierPath.fill(dirtyRect)
}
}
Я также попытался предложения here, но не повезло. Я также проверил другие ответы и не смог найти ответ. Большинство обложек делают ваш собственный класс KVO совместимым. Я хочу наблюдать объект NSWindow. Что мне не хватает?