2016-02-28 80 views
0

我檢查並刪除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) 

} 

回答

1

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