diff --git a/Code/Network/RKResponseMapperOperation.m b/Code/Network/RKResponseMapperOperation.m index 5a17b43c..e6357a40 100644 --- a/Code/Network/RKResponseMapperOperation.m +++ b/Code/Network/RKResponseMapperOperation.m @@ -386,7 +386,7 @@ static inline NSManagedObjectID *RKObjectIDFromObjectIfManaged(id object) if (objectID) { if ([objectID isTemporaryID]) RKLogWarning(@"Performing object mapping to temporary target objectID. Results may not be accessible without obtaining a permanent object ID."); NSManagedObject *localObject = [self.managedObjectContext existingObjectWithID:objectID error:&blockError]; - NSAssert(localObject == nil || [localObject.managedObjectContext isEqual:self.managedObjectContext], @"Serious Core Data error: requested existing object with ID %@ in context %@, instead got an object reference in context %@. This may indicate that the objectID for your target managed object was obtained using `obtainPermanentIDsForObjects:error:` in the wrong context.", objectID, self.managedObjectContext, [localObject managedObjectContext]); + NSAssert(localObject == nil || localObject.managedObjectContext == nil || [localObject.managedObjectContext isEqual:self.managedObjectContext], @"Serious Core Data error: requested existing object with ID %@ in context %@, instead got an object reference in context %@. This may indicate that the objectID for your target managed object was obtained using `obtainPermanentIDsForObjects:error:` in the wrong context.", objectID, self.managedObjectContext, [localObject managedObjectContext]); if (! localObject) { RKLogWarning(@"Failed to retrieve existing object with ID: %@", objectID); RKLogCoreDataError(blockError); diff --git a/Tests/Logic/Network/RKManagedObjectRequestOperationTest.m b/Tests/Logic/Network/RKManagedObjectRequestOperationTest.m index 258fd3ce..3b5aa8c9 100644 --- a/Tests/Logic/Network/RKManagedObjectRequestOperationTest.m +++ b/Tests/Logic/Network/RKManagedObjectRequestOperationTest.m @@ -374,6 +374,22 @@ NSSet *RKSetByRemovingSubkeypathsFromSet(NSSet *setOfKeyPaths); expect([human hasBeenDeleted]).to.equal(YES); } +- (void)testThatDeletionOfObjectThatHasAlreadyBeenDeletedFromCoreDataDoesNotRaiseException +{ + RKManagedObjectStore *managedObjectStore = [RKTestFactory managedObjectStore]; + RKHuman *human = [RKTestFactory insertManagedObjectForEntityForName:@"Human" inManagedObjectContext:managedObjectStore.persistentStoreManagedObjectContext withProperties:nil]; + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"/humans/success" relativeToURL:[RKTestFactory baseURL]]]; + request.HTTPMethod = @"DELETE"; + [managedObjectStore.persistentStoreManagedObjectContext saveToPersistentStore:nil]; + RKManagedObjectRequestOperation *managedObjectRequestOperation = [[RKManagedObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[]]; + managedObjectRequestOperation.managedObjectContext = managedObjectStore.persistentStoreManagedObjectContext; + managedObjectRequestOperation.targetObject = human; + [managedObjectRequestOperation start]; + [managedObjectRequestOperation waitUntilFinished]; + expect(managedObjectRequestOperation.error).to.beNil(); + expect([human hasBeenDeleted]).to.equal(YES); +} + - (void)testThatManagedObjectMappedAsTheRelationshipOfNonManagedObjectsAreRefetchedFromTheParentContext { RKManagedObjectStore *managedObjectStore = [RKTestFactory managedObjectStore];