Corrupción de archivos aparentemente aleatoria usando AVAudioRecorder (a veces el archivo no se puede reproducir) - iOS

En una aplicación que estoy desarrollando actualmente, he golpeado más o menos una pared de ladrillos. En la aplicación, puede ingresar una vista que enumera todos los archivos de audio guardados localmente en una vista de tabla estándar. Desde aquí, puede hacer clic en ellos para reproducirlos, o presionar un botón de grabación a continuación para hacer una nueva grabación, que luego se guardará automáticamente en el sandbox de aplicaciones.

Ahora todo esto funciona perfectamente bien, la mayoría de las veces. Puedo sentarme y hacer grabaciones y reproducirlas. Puedo sentarme y probar esto durante 45 años sin ningún problema. Entonces, de repente, en momentos aleatorios, encontraré un problema muy extraño. El problema es que, de repente, la grabadora comienza a guardar nada más que archivos corruptos que no se pueden reproducir y tienen un tamaño exacto de 4096 bytes, sin importar durante cuánto tiempo grabe.

Uso el AVAudioRecorder de una manera totalmente estándar, configurándolo así:

// Specific settings for the audio recording
NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys:
    [NSNumber numberWithInt:AVAudioQualityMin],
    AVEncoderAudioQualityKey,
    [NSNumber numberWithInt:8], 
    AVEncoderBitRateKey,
    [NSNumber numberWithInt: 2], 
    AVNumberOfChannelsKey,
    [NSNumber numberWithFloat:22000.0], 
    AVSampleRateKey,
    nil];

NSError *error = nil;
audioRecorder = [[AVAudioRecorder alloc]
    initWithURL:contentURL
    settings:recordSettings
    error:&error];
audioRecorder.delegate = self;

Comienzo la grabación así:

if (!isRecording) {
    isRecording = YES;
    [audioRecorder record];

    // Start the timer
    recordTiming = [NSDate date];

    timeCheck = [NSTimer
        scheduledTimerWithTimeInterval:1.0f
        target:self
        selector:@selector(timeCheck)
        userInfo:nil
        repeats:YES];
}

Y luego deteniéndolo con esto:

if (isRecording) {
    [audioRecorder stop];

    // Stop the timer
    [timeCheck invalidate];
}

No tengo idea de qué podría causar este problema. Hasta ahora he intentado casi todo. Verifiqué para asegurarme de que el objeto de la grabadora se recicla correctamente (por lo que tiene una nueva instancia para cada grabación ahora), y que la referencia anterior se desasigna y así sucesivamente, para asegurarme de que no tiene nada que ver con objetos que interfieren, pero nada lo resuelve.

¿Hay alguien que tenga una ligera idea de lo que podría causar problemas con los archivos dañados?

Respuestas a la pregunta(2)

Su respuesta a la pregunta