¿Cambiar la salida de audio entre el receptor y el altavoz en iOS7 y superior?

Tengo un reproductor de audio que tiene la opción de cambiar la salida de audio del altavoz al receptor / auricular (independientemente de si el auricular está conectado) cuando el sensor de proximidad notifica 1. El siguiente es mi código para hacerlo.

- (void) switchAudioOutput:(NSString*)output{
    AVAudioSession* audioSession = [AVAudioSession sharedInstance];
    BOOL success;
    NSError* error;

    if([output isEqualToString:keAudioOutputReciever]){
        //Force current audio out through reciever
        //set the audioSession override
        success = [audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideNone
                                             error:&error];
        if (!success)
            NSLog(@"AVAudioSession error overrideOutputAudioPort:%@",error);

        //activate the audio session
        success = [audioSession setActive:YES error:&error];
        if (!success)
            NSLog(@"AVAudioSession error activating: %@",error);
        else
            NSLog(@"AVAudioSession active with override: AVAudioSessionPortOverrideNone");

    }else if([output isEqualToString:keAudioOutputSpeaker]){
        //set the audioSession override
        success = [audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker
                                                  error:&error];
        if (!success)
            NSLog(@"AVAudioSession error overrideOutputAudioPort:%@",error);

        //activate the audio session
        success = [audioSession setActive:YES error:&error];
        if (!success)
            NSLog(@"AVAudioSession error activating: %@",error);
        else
            NSLog(@"AVAudioSession active with override: AVAudioSessionPortOverrideSpeaker");

    }
 }

Esto se basó en la respuestaEl botón de alternancia enruta el audio al altavoz y al receptor yingrese la descripción del enlace aquí. Noté que esto solo fuerza el audio al altavoz solo, pero no garantiza que la ruta vaya solo al receptor. Además, mientras cambio al altavoz, aparece el siguiente error:

Error de AVAudioSession overrideOutputAudioPort: Error Domain = NSOSStatusErrorDomain Code = -50 "La operación no se pudo completar (error de OSStatus -50)".

Respuestas a la pregunta(1)

Su respuesta a la pregunta