Fix issues with passing NSErrors into blocks inappropriately.

This commit is contained in:
Jeff Arena
2012-10-02 12:54:24 -04:00
parent f467fa20b1
commit 5b372f4cea
3 changed files with 28 additions and 7 deletions

View File

@@ -74,14 +74,19 @@
- (BOOL)saveToPersistentStore:(NSError **)error
{
__block NSError *localError = nil;
NSManagedObjectContext *contextToSave = self;
while (contextToSave) {
__block BOOL success;
[contextToSave performBlockAndWait:^{
success = [contextToSave save:error];
success = [contextToSave save:&localError];
}];
if (! success) return NO;
if (! success) {
*error = localError;
return NO;
}
if (! contextToSave.parentContext && contextToSave.persistentStoreCoordinator == nil) {
RKLogWarning(@"Reached the end of the chain of nested managed object contexts without encountering a persistent store coordinator. Objects are not fully persisted.");
return NO;

View File

@@ -143,6 +143,7 @@
RKLogWarning(@"Unable to delete object sent with `DELETE` request: Failed to retrieve object with objectID %@", self.targetObjectID);
RKLogCoreDataError(_blockError);
_blockSuccess = NO;
*error = _blockError;
}
}];
}
@@ -165,6 +166,11 @@
[self.privateContext performBlockAndWait:^{
_blockObjects = [self.privateContext executeFetchRequest:fetchRequest error:&_blockError];
}];
if (_blockObjects == nil) {
*error = _blockError;
return nil;
}
RKLogTrace(@"Fetched local objects matching URL '%@' with fetch request '%@': %@", URL, fetchRequest, _blockObjects);
[localObjects addObjectsFromArray:_blockObjects];
} else {
@@ -204,12 +210,20 @@
- (BOOL)saveContext:(NSError **)error
{
BOOL success = YES;
__block BOOL success = YES;
__block NSError *localError = nil;
if ([self.privateContext hasChanges]) {
success = (self.savesToPersistentStore) ? [self.privateContext saveToPersistentStore:error] : [self.privateContext save:error];
if (self.savesToPersistentStore) {
success = [self.privateContext saveToPersistentStore:&localError];
} else {
[self.privateContext performBlockAndWait:^{
success = [self.privateContext save:&localError];
}];
}
if (! success) {
*error = localError;
RKLogError(@"Failed saving managed object context %@ %@", (self.savesToPersistentStore ? @"to the persistent store" : @""), self.privateContext);
RKLogCoreDataError(*error);
RKLogCoreDataError(localError);
}
}
@@ -219,12 +233,14 @@
- (BOOL)obtainPermanentObjectIDsForInsertedObjects:(NSError **)error
{
__block BOOL _blockSuccess = YES;
__block NSError *localError = nil;
NSArray *insertedObjects = [self.privateContext.insertedObjects allObjects];
if ([insertedObjects count] > 0) {
RKLogDebug(@"Obtaining permanent ID's for %ld managed objects", (unsigned long) [insertedObjects count]);
[self.privateContext performBlockAndWait:^{
_blockSuccess = [self.privateContext obtainPermanentIDsForObjects:insertedObjects error:error];
_blockSuccess = [self.privateContext obtainPermanentIDsForObjects:insertedObjects error:&localError];
}];
if (!_blockSuccess) *error = localError;
}
return _blockSuccess;;

View File

@@ -100,7 +100,7 @@ NSError *RKErrorFromMappingResult(RKMappingResult *mappingResult)
- (id)parseResponseData:(NSError **)error
{
NSString *MIMEType = [self.response MIMEType];
NSError *underlyingError;
NSError *underlyingError = nil;
id object = [RKMIMETypeSerialization objectFromData:self.data MIMEType:MIMEType error:&underlyingError];
if (! object) {
NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];