Comportamiento extraño de fopen en ios

Estoy intentando crear un file por fopen y luego escribirlo, pero sucedieron cosas extrañas.

  1. Cuando conecto el iphone al puerto USB. Todo funciona bien. Se crea un file en el directory tmp o en el directory del documento como se esperaba.
  2. Cuando desconecto el dispositivo y hago lo mismo, el file no apareció. Me preguntaba por qué.

Yo uso fopen para crear el file. En mi caso, debería hacer esto para crear y luego escribir el file. La llamada es fopen (pcm_output, "wb +");

Necesitas usar esta llamada.

char const *path = [fileManager fileSystemRepresentationWithPath:url.path]; 

De los docs …

fileSystemRepresentationWithPath: – (const char *) fileSystemRepresentationWithPath: ruta (NSString *)

iOS (2.0 y posterior)

Devuelve una representación de cadena C de una ruta determinada que codifica correctamente las cadenas Unicode para su uso por el sistema de files.

ruta: un object de cadena que contiene una ruta a un file. Una representación de cadena en C de ruta que codifica correctamente las cadenas Unicode para su uso por el sistema de files.

Probablemente estés escribiendo fuera del sandbox, ¿puedes publicar el path? Igual que una testing intenta activar iTunes Sharing (esto no debería tener efecto, solo es una testing) para tu aplicación.

EDITAR:

Después de las testings descubrí que tienes que usar:

 NSString *docsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSString *filePath = [docsPath stringByAppendingPathComponent:[NSString stringWithCString:pcm_output encoding:NSUTF8StringEncoding]]; fopen([filePath UTF8String], "wb+"); 

En lugar de solo:

 fopen([filePath UTF8String], "wb+"); 
 NSArray *paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES ); NSString* docDir = [paths objectAtIndex:0]; _tempLogPath = [docDir stringByAppendingPathComponent: @"Aisound5_CBLog.log"]; _tempPcmPath = [docDir stringByAppendingPathComponent: @"OutPcm.pcm"]; _tempWavPath = [docDir stringByAppendingPathComponent: @"OutWav.wav"]; tts_resource = [[bundle pathForResource:@"Resource_dev" ofType:@"irf"] UTF8String]; tts_log = [_tempLogPath UTF8String]; pcm_output = [_tempPcmPath UTF8String]; wav_output = [_tempWavPath UTF8String]; 

El código original es este, en el que tts_resource tts_log pcm_output y wav_output se definen en un file .h y se utilizan en un file .c con fopen.

Había intentado en su path para iniciar la cadena const con el estilo explicit const *, pero el problema sigue siendo el mismo.