保存 CoreData 上下文和绑定问题

Posted

技术标签:

【中文标题】保存 CoreData 上下文和绑定问题【英文标题】:Saving CoreData context and binding problem 【发布时间】:2010-11-30 08:25:57 【问题描述】:

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

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

如何防止 CoreData/binding 这样做,因为用户失去焦点很烦人!

编辑:将解决方案添加为单独的答案,以将问题标记为已完成!

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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 种可能的解决方案来设置滚动视图的滚动位置

关于NSScrollView 的Apple 文档 这对我不起作用 关于Scrolling an NSScrollView programatically 的快速入门!

【讨论】:

以上是关于保存 CoreData 上下文和绑定问题的主要内容,如果未能解决你的问题,请参考以下文章

CoreData:在保存文档之前合并两个上下文

不保存上下文的 CoreData 保存

CoreData:将数据保存到上下文

核心数据、绑定、NSArrayController 和表视图 - 如何生成核心数据上下文的视图

解决RestKit中的CoreData合并冲突,当一个上下文正在保存对象更新而另一个正在删除对象时

托管对象上下文不会保存——没有错误