试图找出核心数据错误,并在userInfo的保存方法返回的NSError内部查看。
iphone-core-data-unresolved-error-while-saving,由于我缺乏积分,我无法做出、赞扬或提出问题。
有谁能为我指出在Apple,NSValidationErrorObject,NSValidationErrorKey...etc中定义了以下键?
我的理解是:如果CoreData的错误代码== NSValidationMultipleErrorsError,那么NSError的userInfo (字典)将包含所有详细的单错误信息,而所有这些详细的单个错误都可以从存储在userInfo的"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
发布于 2014-08-10 20:04:19
以下是来自“英语短信”的引文,谢谢!
核心数据验证错误在CoreDataErrors.h中定义。我正在考虑让苹果把这些东西从核心数据转移到基金会,因为关键的价值编码真的是“拥有”验证。验证错误应该始终在NSValidationErrorMinimum和NSValidationErrorMaximum之间有一个NSValidationErrorMaximum值。我有一个验证错误示例,可能会对您有所帮助。
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…
一个倍数看起来类似,数组中有额外的NSErrors,这是键NSDetailedErrorsKey的userInfo字典的值。请注意,顶级NSError是一个单一错误,具有可可错误域和错误代码1560。那是NSValidationMultipleErrorsError。该错误应该始终包含NSDetailedErrorsKey下的其他错误。希望这能帮上忙!
https://stackoverflow.com/questions/25070714
复制