Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone UIManagedDocument-验证核心数据实体_Iphone_Ios_Core Data_Nsmanagedobjectcontext_Uimanageddocument - Fatal编程技术网

Iphone UIManagedDocument-验证核心数据实体

Iphone UIManagedDocument-验证核心数据实体,iphone,ios,core-data,nsmanagedobjectcontext,uimanageddocument,Iphone,Ios,Core Data,Nsmanagedobjectcontext,Uimanageddocument,我有一个使用核心数据的应用程序,它通过使用UIManagedObject获取ManagedObjectContext。通过阅读,我发现我不应该直接保存上下文,而是应该依赖UIManagedObject的自动保存或使用saveToURL:。。。我的问题是,我想验证存储在实体中的数据。我对实体有一些约束,这些约束指定字符串属性的最小长度为1。但是,我可以创建一个新对象,将其属性指定为空字符串,并保存文件。在saveToURL的完成处理程序中:。。。它总是具有真正的成功价值。然后,我为实体的name属

我有一个使用核心数据的应用程序,它通过使用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
。我发现通过这篇文章——