我正在研究Mac上现有的Swift/Objtovi-C项目,我在代码中创建了一些UI。我基于在不使用nsarraycontroller(原因)的情况下管理的nstableview中的选择启用按钮。
我有一个属性:

@objc var selectionIndexes : IndexSet = IndexSet()

我不确定selectionIndexes是否有必要让cocoa绑定系统看到它。
我使用以下方法连接按钮的MyController绑定:
newButton.bind(NSBindingName.enabled, to: MyController.sharedInstance,
     withKeyPath: "selectionIndexes",
     options: [NSBindingOption.valueTransformer : MyTransformer()])

这可以正常工作,使用正确的属性调用转换器并正确设置启用,但对选择的更改不会触发绑定,因此按钮保持禁用状态。
我必须明确告诉系统我正在更改值,例如。
self.willChangeValue(for: \.selectionIndexes )
self.selectionIndexes = proposedSelectionIndexes
self.didChangeValue(for: \.selectionIndexes)

这看起来很蹩脚。有更好的办法吗?

最佳答案

@objc是将属性公开给objective-c运行时所必需的。
要使属性键值符合观察要求,必须添加dynamic关键字

@objc dynamic var selectionIndexes = IndexSet()

删除...ChangeValue(for

10-06 04:55