2016-02-29 2 views
0

В моей OS X 10.11 приложение Cocoa с использованием Swift 2, я пытаюсь реализовать менеджер отмены для связанного текстового поля, и когда я удаляю отмену, он всегда просто помещает 0 для значения, вместо этого из того, что я хранил. Я использовал код, показанный ниже. Если я добавлю некоторые инструкции print(), я вижу правильные значения, поступающие в регистр, но отмена всегда записывает 0 обратно. Что я сделал не так? NSTextField привязан к свойству «ud».NSUndoManager registerUndoWithTarget установка неправильного значения

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

Последний параметр registerUndoWithTarget - это объект. Swift преобразует Double в NSNumber, но менеджер отмены не преобразует NSNumber в Double.

+0

Спасибо! Теперь я перехожу в словарь с ключом и значением, а затем вызывает метод, который снова вызывает updatePointValue с нужными элементами. – Gargoyle

Смежные вопросы