Skip to content

Commit 5cecb58

Browse files
committed
Add RKLog helper for displaying detailed key-value validation failure information. closes RestKit#750
1 parent dcef1b1 commit 5cecb58

File tree

3 files changed

+40
-1
lines changed

3 files changed

+40
-1
lines changed

Code/ObjectMapping/RKObjectMappingOperation.m

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,8 @@ - (BOOL)validateValue:(id *)value atKeyPath:(NSString*)keyPath {
252252
success = [self.destinationObject validateValue:value forKeyPath:keyPath error:&_validationError];
253253
if (!success) {
254254
if (_validationError) {
255-
RKLogError(@"Validation failed while mapping attribute at key path %@ to value %@. Error: %@", keyPath, *value, [_validationError localizedDescription]);
255+
RKLogError(@"Validation failed while mapping attribute at key path '%@' to value %@. Error: %@", keyPath, *value, [_validationError localizedDescription]);
256+
RKLogValidationError(_validationError);
256257
} else {
257258
RKLogWarning(@"Destination object %@ rejected attribute value %@ for keyPath %@. Skipping...", self.destinationObject, *value, keyPath);
258259
}

Code/Support/RKLog.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,3 +199,9 @@ void RKLogInitialize(void);
199199
Trace or 6
200200
*/
201201
void RKLogConfigureFromEnvironment(void);
202+
203+
/**
204+
Logs extensive information about an NSError generated as the results
205+
of a failed key-value validation error.
206+
*/
207+
void RKLogValidationError(NSError *);

Code/Support/RKLog.m

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,3 +127,35 @@ int RKLogLevelForString(NSString *logLevel, NSString *envVarName)
127127
return -1;
128128
}
129129
}
130+
131+
void RKLogValidationError(NSError *validationError) {
132+
if ([[validationError domain] isEqualToString:@"NSCocoaErrorDomain"]) {
133+
NSDictionary *userInfo = [validationError userInfo];
134+
NSArray *errors = [userInfo valueForKey:@"NSDetailedErrors"];
135+
if (errors) {
136+
for (NSError *detailedError in errors) {
137+
NSDictionary *subUserInfo = [detailedError userInfo];
138+
RKLogError(@"Core Data Save Error\n \
139+
NSLocalizedDescription:\t\t%@\n \
140+
NSValidationErrorKey:\t\t\t%@\n \
141+
NSValidationErrorPredicate:\t%@\n \
142+
NSValidationErrorObject:\n%@\n",
143+
[subUserInfo valueForKey:@"NSLocalizedDescription"],
144+
[subUserInfo valueForKey:@"NSValidationErrorKey"],
145+
[subUserInfo valueForKey:@"NSValidationErrorPredicate"],
146+
[subUserInfo valueForKey:@"NSValidationErrorObject"]);
147+
}
148+
}
149+
else {
150+
RKLogError(@"Core Data Save Error\n \
151+
NSLocalizedDescription:\t\t%@\n \
152+
NSValidationErrorKey:\t\t\t%@\n \
153+
NSValidationErrorPredicate:\t%@\n \
154+
NSValidationErrorObject:\n%@\n",
155+
[userInfo valueForKey:@"NSLocalizedDescription"],
156+
[userInfo valueForKey:@"NSValidationErrorKey"],
157+
[userInfo valueForKey:@"NSValidationErrorPredicate"],
158+
[userInfo valueForKey:@"NSValidationErrorObject"]);
159+
}
160+
}
161+
}

0 commit comments

Comments
 (0)