【问题标题】:userInfo Keys used in Core Data Validation Errors ErroruserInfo Keys used in Core Data Validation Errors 错误
【发布时间】:2014-09-24 02:17:29
【问题描述】:

试图找出Core Data Errors Error,并查看MOC的save方法返回的NSError中的userInfo。

iphone-core-data-unresolved-error-while-saving 由于我的分数不足,我无法做出表扬或提出问题。

谁能帮我指出以下键在 Apple Doc、NSValidationErrorObject、NSValidationErrorKey...等中定义的位置?

我的理解是:如果 CoreData 的错误码 == NSValidationMultipleErrorsError,那么 NSError 的 userInfo(dictionary) 将包含所有详细的单一错误信息,并且所有这些详细的单一错误都可以从存储在“NSDetailedErrorsKey”下的数组中访问来自用户信息。

我只是在核心数据常量参考中没有看到它们(NSValidationErrorObject、NSValidationErrorKe...)...???它们不透明吗?

谢谢。


- (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

【问题讨论】:

    标签: ios core-data runtime-error


    【解决方案1】:

    以下是引用自@quellish 的消息,谢谢@quellish!

    Core Data 验证错误在 CoreDataErrors.h 中定义。我正在考虑要求 Apple 将这些东西从核心数据中移到 Foundation 中,因为 Key Value Coding 确实“拥有”验证。验证错误也应该始终有一个介于 NSValidationErrorMinimum 和 NSValidationErrorMaximum 之间的 errorCode 值。 我有一个可能对您有帮助的示例验证错误。

    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

    multiple 看起来很相似,在数组中有额外的 NSErrors,它是键 NSDetailedErrorsKey 的 userInfo 字典的值。 请注意,顶级 NSError 是可可错误域和错误代码 1560 的单个错误。即 NSValidationMultipleErrorsError。该错误应始终包含 NSDetailedErrorsKey 下的其他错误。 希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-22
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多