首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >核心数据验证错误中的userInfo键

核心数据验证错误中的userInfo键
EN

Stack Overflow用户
提问于 2014-07-31 23:43:20
回答 1查看 1.1K关注 0票数 1

试图找出核心数据错误,并在userInfo的保存方法返回的NSError内部查看。

iphone-core-data-unresolved-error-while-saving,由于我缺乏积分,我无法做出、赞扬或提出问题。

有谁能为我指出在Apple,NSValidationErrorObject,NSValidationErrorKey...etc中定义了以下键?

我的理解是:如果CoreData的错误代码== NSValidationMultipleErrorsError,那么NSError的userInfo (字典)将包含所有详细的单错误信息,而所有这些详细的单个错误都可以从存储在userInfo的"NSDetailedErrorsKey“下的数组中访问。

我只是没看到他们(NSValidationErrorObject,NSValidationErrorKe.)在核心数据常量中引用.?它们不透明吗?

谢谢。

代码语言:javascript
代码运行次数:0
运行
复制
- (BOOL)saveData {
    NSError *error;
    if (![_sharedManagedObjectContext save:&error]) {
        // If Cocoa generated the error...
        NSString *message = nil;
        if ([[error domain] isEqualToString:@"NSCocoaErrorDomain"]) {
            // ...check whether there's an NSDetailedErrors array            
            NSDictionary *userInfo = [error userInfo];
            if ([userInfo valueForKey:@"NSDetailedErrors"] != nil) {
                // ...and loop through the array, if so.
                NSArray *errors = [userInfo valueForKey:@"NSDetailedErrors"];
                for (NSError *anError in errors) {

                    NSDictionary *subUserInfo = [anError userInfo];
                    subUserInfo = [anError userInfo];
                    // Granted, this indents the NSValidation keys rather a lot
                    // ...but it's a small loss to keep the code more readable.
                    NSLog(@"Core Data Save Error\n\n \
                      NSValidationErrorKey\n%@\n\n \
                      NSValidationErrorPredicate\n%@\n\n \
                      NSValidationErrorObject\n%@\n\n \
                      NSLocalizedDescription\n%@", 
                      [subUserInfo valueForKey:@"NSValidationErrorKey"], 
                      [subUserInfo valueForKey:@"NSValidationErrorPredicate"], 
                      [subUserInfo valueForKey:@"NSValidationErrorObject"], 
                      [subUserInfo valueForKey:@"NSLocalizedDescription"]);
                }
            }
            // If there was no NSDetailedErrors array, print values directly
            // from the top-level userInfo object. (Hint: all of these keys
            // will have null values when you've got multiple errors sitting
            // behind the NSDetailedErrors key.
            else {
                    NSLog(@"Core Data Save Error\n\n \
                      NSValidationErrorKey\n%@\n\n \
                      NSValidationErrorPredicate\n%@\n\n \
                      NSValidationErrorObject\n%@\n\n \
                      NSLocalizedDescription\n%@", 
                      [userInfo valueForKey:@"NSValidationErrorKey"], 
                      [userInfo valueForKey:@"NSValidationErrorPredicate"], 
                      [userInfo valueForKey:@"NSValidationErrorObject"], 
                      [userInfo valueForKey:@"NSLocalizedDescription"]);

            }
        } 
        // Handle mine--or 3rd party-generated--errors
        else {
            NSLog(@"Custom Error: %@", [error localizedDescription]);
        }
        return NO;
    }
    return YES;
}


  [1]: https://stackoverflow.com/questions/1283960/iphone-core-data-unresolved-error-while-saving
EN

回答 1

Stack Overflow用户

发布于 2014-08-11 04:04:19

以下是来自“英语短信”的引文,谢谢!

核心数据验证错误在CoreDataErrors.h中定义。我正在考虑让苹果把这些东西从核心数据转移到基金会,因为关键的价值编码真的是“拥有”验证。验证错误应该始终在NSValidationErrorMinimum和NSValidationErrorMaximum之间有一个NSValidationErrorMaximum值。我有一个验证错误示例,可能会对您有所帮助。

代码语言:javascript
代码运行次数:0
运行
复制
Single validation error (only one property failed): Error Domain=NSCocoaErrorDomain Code=1560 "The operation couldn’t be completed. (Cocoa error 1560.)" UserInfo=0x2808ac0 {NSDetailedErrors=( 
"Error Domain=NSCocoaErrorDomain Code=1670 \"Name must be John\" UserInfo=0x2805f30 {NSLocalizedDescription=Name must be John}", 
"Error Domain=NSCocoaErrorDomain Code=1570 \"The operation couldn\U2019t be completed. (Cocoa error 1570.)\" UserInfo=0x28089c0 {NSValidationErrorObject=<Employee: 0xc003180> (entity: Employee; id: 0xc0031d0 <x-coredata:///Employee/t6FEF17D8-0306-4959-9BFB-4B806E6ED1302> ; da…

see full text

一个倍数看起来类似,数组中有额外的NSErrors,这是键NSDetailedErrorsKey的userInfo字典的值。请注意,顶级NSError是一个单一错误,具有可可错误域和错误代码1560。那是NSValidationMultipleErrorsError。该错误应该始终包含NSDetailedErrorsKey下的其他错误。希望这能帮上忙!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25070714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档