我有一个核心数据项目。
基本上我有一个NSTableView,我添加一些实体(使用“add:”选择器),双击TableView打开一个新的NSWindow,可以使用一些NSTextFields编辑实体。 每个文本字段都绑定到实体的属性。
除了仅在文本字段失去焦点时更新实体的属性这一事实外,一切都运行良好。
如果我在第一个文本字段上写字然后移动到第二个文本字段,我的条目将被保存,但如果我在第一个文本字段上写字并关闭窗口我会丢失我的更改。
如果我在文本字段中写一些内容,如何更新核心数据实体?我应该使用 textDidChange:?
---更新---
不幸的是[上下文保存]不起作用。如果我理解正确,则实体不修改,直到NSTextField辞职第一响应者。
目前唯一可行的解决方案是:
(void)controlTextDidChange:(NSNotification *)aNotification
{
NSTextField *tf = [aNotification object];
[self.window makeFirstResponder:tf];
}
但这非常不优雅,无论如何我还需要将光标重新设置在NSTextField的末尾。
答案 0 :(得分:1)
设置NSContinuouslyUpdatesValueBindingOption
将导致模型在每次文本字段更改时更新,这会正确设置脏标志并导致文档在退出时保存。
答案 1 :(得分:0)
我认为你可以使用DidEndEditing或TextDidChange,另一种方法是在窗口关闭事件中进行操作,但我不推荐它。
答案 2 :(得分:0)
如果您还没有人,可以在窗口上设置一个委托并使用-windowWillClose:或观察NSWindowWillCloseNotification。然后,可以在窗口关闭时调用[[notification object] makeFirstResponder:[window initialFirstResponder]]
来将窗口的第一响应者设置为其初始第一响应者。这将导致作为第一响应者的控件(例如NSTextField
)退出第一响应者状态,并且绑定将保存更改。