UIManagedDocument - 验证核心数据实体
Posted
技术标签:
【中文标题】UIManagedDocument - 验证核心数据实体【英文标题】:UIManagedDocument - Validating Core Data Entity 【发布时间】:2012-02-03 01:10:22 【问题描述】:我有一个使用 Core Data 的应用程序,它通过使用 UIManagedObject 获取其 ManagedObjectContext。从阅读中,我发现我不应该直接保存上下文 - 而我应该依赖 UIManagedObject 的自动保存或使用 saveToURL:... 我的问题是我想验证存储在我的实体中的数据。我对实体有约束,指定字符串属性的最小长度为 1。但是,我可以创建一个新对象,为其属性分配空字符串,然后保存文件。在 saveToURL:... 的完成处理程序中,它始终具有真正的成功值。然后,我为我的实体的 name 属性创建了自己的验证器。我使用了 Core Data Programming Guide 中的示例代码 -
-(BOOL)validateName:(id *)ioValue error:(__autoreleasing NSError **)outError
if (*ioValue == nil)
if (outError != NULL)
NSString *errorStr = @"nil error";
NSDictionary *userInfoDict = [NSDictionary dictionaryWithObject:errorStr
forKey:NSLocalizedDescriptionKey];
NSError __autoreleasing *error = [[NSError alloc] initWithDomain:@"domain"
code:1
userInfo:userInfoDict];
*outError = error;
return NO;
else if( [*ioValue length] == 0 )
if (outError != NULL)
NSString *errorStr = @"length error";
NSDictionary *userInfoDict = [NSDictionary dictionaryWithObject:errorStr
forKey:NSLocalizedDescriptionKey];
NSError __autoreleasing *error = [[NSError alloc] initWithDomain:@"domain"
code:1
userInfo:userInfoDict];
*outError = error;
return NO;
else
return YES;
当它运行时,我看到 ioValue 的长度为 0 并且它返回 NO,但是我的完成处理程序永远不会被调用。任何帮助都会很棒。
关于如何使用 UIManagedDocument 处理保存错误,我是否缺少一些东西 - 特别是如何通知调用代码在保存其信息时发生错误。
【问题讨论】:
【参考方案1】:通常,您应该只调用 saveToURL 来创建一个全新的文件。让自动保存完成剩下的工作。
另外,我不确定我是否听懂了你的问题。如果您询问如何知道保存失败,最好的办法是注册通知(因为所有保存都发生在后台线程上)。
直接来自文档:
UIDocument 对象在其生命周期的任何时刻都有特定的状态。您可以通过查询 documentState 属性来检查当前状态。并且您可以通过观察 UIDocumentStateChangedNotification 通知来通知文档状态的变化。
【讨论】:
【参考方案2】:我想我需要在 UIManagedDocument 的子类中实现handleError:(NSError *)error userInteractionPermitted:(BOOL)userInteractionPermitted
。我通过这篇文章发现了 - http://blog.stevex.net/2011/12/uimanageddocument-autosave-troubleshooting/
【讨论】:
以上是关于UIManagedDocument - 验证核心数据实体的主要内容,如果未能解决你的问题,请参考以下文章
在核心数据中使用 UIManagedDocument 的标准(或正确)方法是啥
如何将现有的非文档核心数据存储转换为 uimanageddocument?
iOS使用UIManagedDocument添加初始核心数据文件,而不是appdelegate
可以使用 NSFileManager 处理从 UIManagedDocument 创建的核心数据数据库吗?