NSUndoManager registerUndoWithTarget设置错误值

时间:2016-02-29 18:14:00

标签: macos cocoa-bindings

在我的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)
    }
}

1 个答案:

答案 0 :(得分:0)

registerUndoWithTarget的最后一个参数是一个对象。 Swift会将Double转换为NSNumber,但撤消管理器不会将NSNumber转换为Double。