В моем приложении я разрешаю пользователю записывать звуковой клип, а позже, если пользователь выбирает, я хочу, чтобы он смог его удалить.iPhone/Objective C: Не удается удалить файл
Это код, я использую:
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);
}
Проблема заключается в том, что fileExistsAtPath
и isDeletableFileAtPath
возвращение нуль и removeItemAtPath
не работает, и выдает эту ошибку,
Error: Error Domain=NSCocoaErrorDomain Code=4 UserInfo=0x391b7f0 "Operation could not be completed. (Cocoa error 4.)"
Путь имеет эта форма:
/Users/andrei/Library/Application%20Support/iPhone%20Simulator/User/Applications/5472B318-FA57-4F8D-AD91-7E06E9609215/Documents/1280913694.caf
Существует файл, который называется 1280913694.caf
, но он не подбирает его. Связано ли это с тем, как должен быть представлен путь?
Путь работает при воспроизведении аудиофайла с AVAudioPlayer
.
Я также изменил %@
к %d
для fileExistsAtPath
и isDeletableFileAtPath
и ответ 0, который я предполагаю, означает FALSE.
Имя файла хранится в базе данных, и путь к файлу можно получить с помощью этого метода:
-(NSString *)returnFullPathToDirectory
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
return documentsDirectory;
}
После того как я получить это значение, я использую его в следующем коде
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:fileName];
Пожалуйста, измените два '% @' перед '-removeItemAtPath' на'% d' и запустите снова. – kennytm
обратите внимание, что файл: // префикс должен быть удален, т. Е. Преобразовать в NSURL и получить атрибут .path (как и путь выше) – ThomasRS