NSUndoManager registerUndoWithTarget 设置错误值
NSUndoManager registerUndoWithTarget setting wrong value
在我的 OS X 10.11 Cocoa 应用程序中,使用 Swift 2,我正在尝试为绑定的文本字段实现撤消管理器,当我点击撤消时,它是总是只将 0 作为值,而不是我存储的值。我使用了如下所示的代码。如果我在其中添加一些 print() 语句,我会看到正确的值进入 register 语句,但撤消总是写回 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)
}
}
registerUndoWithTarget
的最后一个参数是一个对象。 Swift 会将 Double 转换为 NSNumber,但撤消管理器不会将 NSNumber 转换为 Double。
在我的 OS X 10.11 Cocoa 应用程序中,使用 Swift 2,我正在尝试为绑定的文本字段实现撤消管理器,当我点击撤消时,它是总是只将 0 作为值,而不是我存储的值。我使用了如下所示的代码。如果我在其中添加一些 print() 语句,我会看到正确的值进入 register 语句,但撤消总是写回 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)
}
}
registerUndoWithTarget
的最后一个参数是一个对象。 Swift 会将 Double 转换为 NSNumber,但撤消管理器不会将 NSNumber 转换为 Double。