This is the correct way to create the operation:
RKManagedObjectRequestOperation *operation = [[RKManagedObjectRequestOperation alloc]initWithRequest:request responseDescriptors:@[responseDescriptor]];
but then you replace that one with another created with:
operation = [self.objectManager managedObjectRequestOperationWithRequest:request managedObjectContext:self.objectManager.managedObjectStore.mainQueueManagedObjectContext success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
which uses the object manager proper. This issue is that you haven't given the response descriptor to the object manager, you only gave it to the operation that was just destroyed (because you replaced it).
So, use the first operation you created and set the success and failure blocks on it by calling setCompletionBlockWithSuccess:failure:
.