我有一个使用 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 处理保存错误,我是否缺少一些东西 - 特别是如何通知调用代码在保存其信息时发生了错误。