强制可可绑定在验证后更新(swift)
问题描述:
我检查并删除controlTextDidEndEditing
中NSTextField
的空格,但这些更改未反映在可可绑定中(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)
}
感谢.stringByTrimming ...细化更方便的方法。你能说清楚你的意思是什么时候把这个值赋给文本字段吗? – glenstorey
您可以像复制一样从文本字段中检索字符串值。当你改变字符串时,它实际上不会改变文本字段。您需要将该值分配回文本字段的'stringValue'属性。 – vadian
如果我明白你说的使用IBOutlet将字符值设置为修剪后应该可行,但它不会 - 将句柄phraseTextField.stringValue = textField.stringValue(其中phraseTextField是IBOutlet添加到文本字段)什么都不会改变。另外 - 如果它是一个副本,为什么界面更新,但绑定的管理对象不? – glenstorey