Remove objects persisted to Core Dataduring postObject: when there is an error (Fix Issue #125)

This commit is contained in:
Daniel Hammond
2011-06-16 21:17:14 -04:00
parent 323d5e30b1
commit d9fc311433
5 changed files with 52 additions and 17 deletions

View File

@@ -198,23 +198,7 @@
return NO;
} else if ([self.response isError]) {
if ([self.response isServiceUnavailable]) {
[[NSNotificationCenter defaultCenter] postNotificationName:RKServiceDidBecomeUnavailableNotification object:self];
}
// Since we are mapping what we know to be an error response, we don't want to map the result back onto our
// target object
NSError* error = nil;
RKObjectMappingResult* result = [self mapResponseWithMappingProvider:self.objectManager.mappingProvider toObject:nil error:&error];
if (result) {
error = [result asError];
} else {
RKLogError(@"Encountered an error while attempting to map server side errors from payload: %@", [error localizedDescription]);
}
[(NSObject<RKObjectLoaderDelegate>*)_delegate objectLoader:self didFailWithError:error];
[self handleResponseError];
return NO;
} else if ([self.response isSuccessful] && NO == [self canParseMIMEType:[self.response MIMEType]]) {
RKLogWarning(@"Encountered unexpected response code: %d (MIME Type: %@)", self.response.statusCode, self.response.MIMEType);
@@ -233,6 +217,24 @@
return YES;
}
- (void)handleResponseError {
if ([self.response isServiceUnavailable]) {
[[NSNotificationCenter defaultCenter] postNotificationName:RKServiceDidBecomeUnavailableNotification object:self];
}
// Since we are mapping what we know to be an error response, we don't want to map the result back onto our
// target object
NSError* error = nil;
RKObjectMappingResult* result = [self mapResponseWithMappingProvider:self.objectManager.mappingProvider toObject:nil error:&error];
if (result) {
error = [result asError];
} else {
RKLogError(@"Encountered an error while attempting to map server side errors from payload: %@", [error localizedDescription]);
}
[(NSObject<RKObjectLoaderDelegate>*)_delegate objectLoader:self didFailWithError:error];
}
#pragma mark - RKRequest & RKRequestDelegate methods
// Invoked just before request hits the network