在我的OS X 10.11 Cocoa应用程序中,使用Swift 2,我正在尝试为绑定文本字段实现撤消管理器,当我点击撤消时,它总是只为该值设置0,而不是我存储的值。我使用下面显示的代码。如果我在中添加一些print()语句,我会看到正确的值进入register语句,但是undo总是写回0。我做错了什么? NSTextField绑定到“ud”属性。
private func updatePointValue(key: String, value: Double) {
let index = key.startIndex.advancedBy(1)
let first = String(key.characters.first!).uppercaseString
let rest = key.substringFromIndex(index)
let selector = Selector("set\(first)\(rest):")
let oldValue = order.amounts[key]!
undoManager!.registerUndoWithTarget(self, selector: selector, object: oldValue)
order.amounts[key] = value
}
dynamic var ud: Double {
get {
return order.amounts["ud"] ?? 0
}
set {
updatePointValue("ud", value: newValue)
}
}
答案 0 :(得分:0)
registerUndoWithTarget
的最后一个参数是一个对象。 Swift会将Double转换为NSNumber,但撤消管理器不会将NSNumber转换为Double。