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。