Cocoa 拦截核心数据文档中的保存

Cocoa 拦截核心数据文档中的保存,cocoa,core-data,nsdocument,Cocoa,Core Data,Nsdocument,我有一个带有小文本框的窗口,绑定到核心数据属性。用户在文本框中输入的值必须在某些参数范围内。这些参数是动态的。如果输入的值超出参数范围,将显示一个对话框,询问用户是否希望恢复到以前的值,将值设置为最小值,等等。我已实现ControlTextDiEndEdit方法来截取并验证用户输入的值。我的问题是当用户保存或退出时。用户可以输入一个错误的值,选择保存或退出并保存该值,从而绕过验证。有没有办法在保存之前调用我的验证方法?谢谢 应该在NSManagedObject子类中实现验证,而不是使用文本字段委

我有一个带有小文本框的窗口,绑定到核心数据属性。用户在文本框中输入的值必须在某些参数范围内。这些参数是动态的。如果输入的值超出参数范围,将显示一个对话框,询问用户是否希望恢复到以前的值,将值设置为最小值,等等。我已实现ControlTextDiEndEdit方法来截取并验证用户输入的值。我的问题是当用户保存或退出时。用户可以输入一个错误的值,选择保存或退出并保存该值,从而绕过验证。有没有办法在保存之前调用我的验证方法?谢谢

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


有关验证的更多信息,请参见。

虽然我同意这是最合理的解决方案,但我的目标是在应用程序终止之前询问用户(通过对话框)希望保存的修改值。我超越了-(void)canCloseDocumentWithDelegate:shouldCloseSelector:contextInfo:在我的文档中,并且能够显示我想要的对话框。但是,terminate命令中止,应用程序无法退出(退出菜单项被禁用)。比我更了解情况的人可能会解释原因。此时,我让应用程序观察NSManagedObjectContextWillSaveNotification,如果用户输入的值无效,则实体的属性将设置回原始(有效)值。