强制可可绑定在验证后更新(swift)

问题描述:

我检查并删除controlTextDidEndEditingNSTextField的空格,但这些更改未反映在可可绑定中(CoreData条目未更新)。 NSTextField已更新,但如果您单击该条目并返回空格,则会返回。 如何触发绑定对象来更新数据存储?强制可可绑定在验证后更新(swift)

我绑定的值为NSTextField,我甚至在更新后尝试将.objectValue设置为.stringValue,但它不起作用。

override func controlTextDidEndEditing(obj: NSNotification) { 
    Swift.print("editing is done now") 

    let textField:NSTextField = obj.object as! NSTextField 

    //if last character is a space remove it. 
    while textField.stringValue.characters.last == " " 
    { 
     Swift.print("last char is a space") 
     textField.stringValue.removeAtIndex(textField.stringValue.endIndex.predecessor()) 

    } 

    //save to database now. 
    let dele:AppDelegate = NSApplication.sharedApplication().delegate as! AppDelegate 
    dele.saveAction(nil) 

} 

textField.stringValue不是参考类型。您可以将该值分配回文本字段。

有修剪串

override func controlTextDidEndEditing(obj: NSNotification) { 
    Swift.print("editing is done now") 

    let textField = obj.object as! NSTextField 
    let string = textField.stringValue 
    textField.stringValue = string.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()) 

    //save to database now. 
    let dele:AppDelegate = NSApplication.sharedApplication().delegate as! AppDelegate 
    dele.saveAction(nil) 
} 
+0

感谢.stringByTrimming ...细化更方便的方法。你能说清楚你的意思是什么时候把这个值赋给文本字段吗? – glenstorey

+1

您可以像复制一样从文本字段中检索字符串值。当你改变字符串时,它实际上不会改变文本字段。您需要将该值分配回文本字段的'stringValue'属性。 – vadian

+0

如果我明白你说的使用IBOutlet将字符值设置为修剪后应该可行,但它不会 - 将句柄phraseTextField.stringValue = textField.stringValue(其中phraseTextField是IBOutlet添加到文本字段)什么都不会改变。另外 - 如果它是一个副本,为什么界面更新,但绑定的管理对象不? – glenstorey