mirror of
https://github.com/zhigang1992/RestKit.git
synced 2026-04-24 04:46:01 +08:00
Fix issues with passing NSErrors into blocks inappropriately.
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;;
|
||||
|
||||
@@ -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];
|
||||
|
||||
Reference in New Issue
Block a user