【发布时间】:2018-03-21 19:24:21
【问题描述】:
我正在尝试观察 Swift 4 中 NSPopUpButton 选择的变化。在我的视图控制器的 viewDidLoad() 中,我设置了观察令牌来观察 NSPopUpButton 的 selectedItem 属性
override func viewDidLoad() {
super.viewDidLoad()
observation = observe(\.myPopUpButton.selectedItem) {
objectToObserve, change in
if change.kind == NSKeyValueObservedChange.Kind.setting {
// code to execute goes here
}
}
我在设置observation 的行上设置了一个断点,以确定令牌正在配置正确的密钥路径。我还在闭包内设置了一个中断,以查看它何时执行。当我更改 NSPopUpButton 的选择时,关闭不会执行。
selectedItem 的类型是NSMenuItem?,所以我怀疑我无法对可选属性设置观察值。但是我在 Apple 的文档中找不到任何说明是否是这种情况的内容,而且我不确定我将如何为自己进行验证。
所以我有一个主要问题以及一些后续问题:
- 我可以在 Swift 4.1 中观察一个可选属性吗?
- 如果是这样,我该如何解决这个问题,我做错了什么?
- 如果没有,我该如何尝试监控 NSPopUpButton 的状态?
我已经尝试过的故障排除...
- 将
@objc dynamic添加到我的myPopUpButton声明中
【问题讨论】:
-
我不明白为什么你不能观察一个可选属性,只要它在你开始时就存在。也许在观察线之前添加一个测试,以确保一切都在你认为的位置。
标签: swift macos swift4 key-value-observing