绑定的NSTextField在失去焦点之前不会更新实体

时间:2012-03-06 09:32:01

标签: xcode core-data binding nstextfield

我有一个核心数据项目。

基本上我有一个NSTableView,我添加一些实体(使用“add:”选择器),双击TableView打开一个新的NSWindow,可以使用一些NSTextFields编辑实体。 每个文本字段都绑定到实体的属性。

除了仅在文本字段失去焦点时更新实体的属性这一事实外,一切都运行良好。

如果我在第一个文本字段上写字然后移动到第二个文本字段,我的条目将被保存,但如果我在第一个文本字段上写字并关闭窗口我会丢失我的更改

如果我在文本字段中写一些内容,如何更新核心数据实体?我应该使用 textDidChange:

---更新---

不幸的是[上下文保存]不起作用。如果我理解正确,则实体修改,直到NSTextField辞职第一响应者。

目前唯一可行的解​​决方案是:

(void)controlTextDidChange:(NSNotification *)aNotification 
{
  NSTextField *tf = [aNotification object];
  [self.window makeFirstResponder:tf];
}

但这非常不优雅,无论如何我还需要将光标重新设置在NSTextField的末尾。

3 个答案:

答案 0 :(得分:1)

设置NSContinuouslyUpdatesValueBindingOption将导致模型在每次文本字段更改时更新,这会正确设置脏标志并导致文档在退出时保存。

答案 1 :(得分:0)

我认为你可以使用DidEndEditing或TextDidChange,另一种方法是在窗口关闭事件中进行操作,但我不推荐它。

答案 2 :(得分:0)

如果您还没有人,可以在窗口上设置一个委托并使用-windowWillClose:或观察NSWindowWillCloseNotification。然后,可以在窗口关闭时调用[[notification object] makeFirstResponder:[window initialFirstResponder]]来将窗口的第一响应者设置为其初始第一响应者。这将导致作为第一响应者的控件(例如NSTextField)退出第一响应者状态,并且绑定将保存更改。