在核心数据文档中拦截保存

Posted

技术标签:

【中文标题】在核心数据文档中拦截保存【英文标题】:Intercepting Save in Core Data Document 【发布时间】:2012-04-20 23:19:38 【问题描述】:

我有一个带有小文本框的窗口,绑定到核心数据属性。用户在文本框中输入的值需要在一定的参数范围内。这些参数是动态的。如果输入的值在参数之外,则会显示一个对话框,询问用户是否要恢复到以前的值,将值设置为最小值等。我已经实现了 controlTextDidEndEditing 方法来拦截和验证用户的值进入。我的问题是用户保存或退出时。用户可以输入错误的值,选择保存或退出并保存值,绕过验证。有没有办法在保存之前调用我的验证方法?谢谢!

【问题讨论】:

【参考方案1】:

您应该在 NSManagedObject 子类中实现验证,而不是使用文本字段委托。然后,您可以强制执行哪些值是有效的,并在输入无效值时返回适当的错误消息。这样做意味着模型负责强制执行有效性,这是这样做的合乎逻辑的地方。

appropriate section of the Core Data documentation 中有更多关于验证的信息。

【讨论】:

虽然我同意这是最合乎逻辑的解决方案,但我的目标是询问用户(通过对话框)在应用程序终止之前他们想要保存哪些修改过的值。我覆盖了... -(void)canCloseDocumentWithDelegate:shouldCloseSelector:contextInfo: 在 MyDocument 中,并且能够放置我想要的对话框。但是,终止命令中止,我的应用程序无法退出(退出菜单项已禁用)。比我有更多知识的人可能会解释原因。 此时我让应用程序观察 NSManagedObjectContextWillSaveNotification,如果用户输入的值无效,实体的属性将设置回原始(有效)值。

以上是关于在核心数据文档中拦截保存的主要内容,如果未能解决你的问题,请参考以下文章

核心数据:SQLite 没有立即更新

基于核心数据文档的应用程序:保存,但无法加载

在核心数据文档中存储文档特定设置的最佳方式是啥?

如何为基于文档的核心数据应用程序的保存对话框预设文件格式到 sqlite?

从核心数据记录在 uiwebview 中显示图像

具有全局持久存储的基于核心数据文档的应用程序