En mi aplicación, dejo que el usuario grabe un clip de sonido y luego, si el usuario lo elige, quiero que pueda eliminarlo.iPhone/Objetivo C: No se puede eliminar un archivo
Este es el código que utilizo:
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSLog(@"File exists: %d", [fileManager fileExistsAtPath:path]);
NSLog(@"Is deletable file at path: %d", [fileManager isDeletableFileAtPath:path]);
[fileManager removeItemAtPath:path error:&error];
if (error != nil)
{
NSLog(@"Error: %@", error);
NSLog(@"Path to file: %@", path);
}
El problema es que fileExistsAtPath
y isDeletableFileAtPath
retorno nulo y el removeItemAtPath
no funciona, y arroja este error,
Error: Error Domain=NSCocoaErrorDomain Code=4 UserInfo=0x391b7f0 "Operation could not be completed. (Cocoa error 4.)"
El camino tiene esta forma:
/Users/andrei/Library/Application%20Support/iPhone%20Simulator/User/Applications/5472B318-FA57-4F8D-AD91-7E06E9609215/Documents/1280913694.caf
hay un archivo llamado 1280913694.caf
allí, pero no la recoja. ¿Tiene algo que ver con la forma en que debe representarse el camino?
La ruta funciona cuando se reproduce el archivo de audio con AVAudioPlayer
.
También ha cambiado el %@
a %d
para fileExistsAtPath
y isDeletableFileAtPath
y la respuesta es 0, lo que supongo significa FALSO.
El nombre del archivo se almacena en una base de datos, y la ruta del archivo se recupera con este método:
-(NSString *)returnFullPathToDirectory
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
return documentsDirectory;
}
Después de obtener este valor, lo uso en el siguiente código
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:fileName];
Cambie los dos '% @' antes de '-removeItemAtPath' a'% d' y vuelva a ejecutar. – kennytm
tenga en cuenta que el prefijo file: // debe eliminarse, es decir, convertir a NSURL y obtener el atributo .path (como de hecho, la ruta es anterior) – ThomasRS