Iphone UIManagedDocument-验证核心数据实体
我有一个使用核心数据的应用程序,它通过使用UIManagedObject获取ManagedObjectContext。通过阅读,我发现我不应该直接保存上下文,而是应该依赖UIManagedObject的自动保存或使用saveToURL:。。。我的问题是,我想验证存储在实体中的数据。我对实体有一些约束,这些约束指定字符串属性的最小长度为1。但是,我可以创建一个新对象,将其属性指定为空字符串,并保存文件。在saveToURL的完成处理程序中:。。。它总是具有真正的成功价值。然后,我为实体的name属性创建了自己的验证器。我使用了《核心数据编程指南》中的示例代码-Iphone UIManagedDocument-验证核心数据实体,iphone,ios,core-data,nsmanagedobjectcontext,uimanageddocument,Iphone,Ios,Core Data,Nsmanagedobjectcontext,Uimanageddocument,我有一个使用核心数据的应用程序,它通过使用UIManagedObject获取ManagedObjectContext。通过阅读,我发现我不应该直接保存上下文,而是应该依赖UIManagedObject的自动保存或使用saveToURL:。。。我的问题是,我想验证存储在实体中的数据。我对实体有一些约束,这些约束指定字符串属性的最小长度为1。但是,我可以创建一个新对象,将其属性指定为空字符串,并保存文件。在saveToURL的完成处理程序中:。。。它总是具有真正的成功价值。然后,我为实体的name属
-(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处理保存错误,特别是如何通知调用代码在保存其信息时发生错误,我缺少什么内容。通常,您应该只调用saveToURL来创建一个全新的文件。让“自动保存”完成其余的操作 另外,我不确定我是否理解你的问题。如果您询问如何了解保存失败,最好是注册通知(因为所有保存都发生在后台线程上) 直接从文档中获取:
UIDocument对象在其生命周期的任何时刻都具有特定的状态。您可以通过查询documentState属性来检查当前状态。通过观察UIDocumentStateChangedNotification通知,可以通知您文档状态的更改。我想我需要在UIManagedDocument的子类中实现
handleError:(NSError*)error UserInteractionAllowed:(BOOL)UserInteractionAllowed
。我发现通过这篇文章——