保存核心数据上下文和绑定问题

时间:2010-11-30 08:25:57

标签: macos core-data cocoa-bindings nstextview

我将CoreData用于运行在10.5及更高版本的Mac应用程序。实体的内容(文本属性)将通过绑定显示在NSTextView中。用户可以在那里编辑文本。

当我尝试保存托管对象上下文时,鼠标光标从文本视图中消失,文本视图向上滚动到顶部。

如何阻止CoreData / binding执行此操作,因为让用户失去焦点会很烦人!

修改:添加解决方案作为单独的答案,将问题标记为已完成!

2 个答案:

答案 0 :(得分:0)

保存之前,请先查看commitEditing。这会导致textview失去焦点,甚至还原当前文本字段中的所有更改。我认为你不能阻止这种行为。您可以在保存后恢复选择和光标位置。我也对这个问题的实际解决方案感兴趣。

答案 1 :(得分:0)

我刚刚找到了解决这个问题的方法。在保存托管对象上下文之前,我保存文本视图的“状态”(选定范围和滚动位置)

NSRange selectedRange   = [self.textView selectedRange];
NSScrollView* scrollView    = [self.textView enclosingScrollView];

// get the current scroll position of the document view
NSPoint scrollPosition = [[scrollView contentView] bounds].origin;

保存我的实体后,我恢复所选范围并滚动位置

[self.textView setSelectedRange:selectedRange];

// restore the scroll location      
[[scrollView contentView] scrollToPoint: scrollPosition];
[scrollView reflectScrolledClipView: [scrollView contentView]];

我找到了2种可能的解决方案来设置滚动视图的滚动位置