iOS: la reproducción del audio grabado falla con el error OSStatus -43 (archivo no encontrado)

Configuré una instancia de AVAudioRecorder de la siguiente manera cuando se carga mi vista:

<code>AVAudioSession *audioSession = [AVAudioSession sharedInstance];
audioSession.delegate = self;
[audioSession setActive:YES error:nil];
[audioSession setCategory:AVAudioSessionCategoryRecord error:nil];

NSString *tempDir = NSTemporaryDirectory();
NSString *soundFilePath = [tempDir stringByAppendingPathComponent:@"sound.m4a"];

NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];
NSLog(@"%@", soundFileURL);

NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys:
                                [NSNumber numberWithInt:kAudioFormatMPEG4AAC], AVFormatIDKey,
                                [NSNumber numberWithInt:AVAudioQualityMin], AVEncoderAudioQualityKey,
                                [NSNumber numberWithInt:16], AVEncoderBitRateKey,
                                [NSNumber numberWithInt: 1], AVNumberOfChannelsKey,
                                [NSNumber numberWithFloat:8000.0], AVSampleRateKey,
                                [NSNumber numberWithInt:8], AVLinearPCMBitDepthKey,
                                nil];

NSError *error = nil;

self.recorder = [[AVAudioRecorder alloc]
                 initWithURL:soundFileURL
                 settings:recordSettings
                 error:&error];
self.recorder.delegate = self;

if (error) {
    NSLog(@"error: %@", [error localizedDescription]);
} else {
    [self.recorder prepareToRecord];
}
</code>

Luego, cuando el usuario presiona el botón de grabar hago:

<code>- (IBAction)record:(id)sender {
    if (!self.isRecording) {
        self.isRecording = YES;
        [self.recorder record];
        self.recordButton.enabled = NO;
    }
}
</code>

Luego para detener la grabación / reproducción:

<code>- (IBAction)stop:(id)sender {
    if (self.isRecording) {
        [self.recorder stop];
        self.recordButton.enabled = YES;
        self.isRecording = NO;
    }

    if (self.isPlaying) {
        [self.player stop];
        self.isPlaying = NO;
        self.playButton.enabled = YES;
    }
}
</code>

Después, quiero poder reproducir lo que se grabó, así que hago lo siguiente:

<code>- (IBAction)play:(id)sender {
    NSError *error = nil;
    self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:self.recorder.url error:&error];
    self.player.delegate = self;

    if (error) {
        NSLog(@"%@", error.localizedDescription);
    } else {
        self.isPlaying = YES;
        [self.player play];
        self.playButton.enabled = NO;
    }
}
</code>

Pero cuando voy a reproducir el archivo es conseguirError de estado del sistema operativo -43 archivo no encontrado.

Todo esto se está ejecutando en el dispositivo por cierto, en el simulador y se produce un error al intentar crear una instancia de la grabadora o el reproductor, y por lo visto, es un problema del simulador.

EDITAR 1: Resolví el error OSStatus -43 parte que tiene algo que ver con el formato de codificación, comenté el formato y grabé y reproducí el archivo correctamente, pero necesito grabar en un formato comprimido. ¿Alguien sabe la configuración para esto?

EDIT 2: Me las arreglé para encontrar la configuración que funcionaba para audio AAC comprimido. Un archivo de audio de 2min sale a 256KB, actualicé mi código para reflejar el estado actual. Gracias a todos los que respondieron por vuestra ayuda.

Respuestas a la pregunta(4)

Su respuesta a la pregunta