Использование NSOpenPanel и копирование выбранного файла - Objective-C

Я пытаюсь создать приложение, которое будет копировать выбранный звуковой файл в каталог приложения. Для этого я написал следующий код:

NSOpenPanel* openDlg = [NSOpenPanel openPanel];
[openDlg setCanChooseFiles:YES];
[openDlg setAllowsMultipleSelection:NO];
[openDlg setCanChooseDirectories:NO];
[openDlg setAllowedFileTypes:[NSArray arrayWithObjects:@"aif",@"aiff",@"mp3",@"wav",@"m4a",nil]];

if ( [openDlg runModalForDirectory:nil file:nil] == NSOKButton )
{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *error;

    NSString *dataPath = [[NSBundle mainBundle] bundlePath];
    NSLog(@"Datapath is %@", dataPath);
    NSLog(@"Selected Files : %@",[[openDlg URLs] objectAtIndex:0]);
    if ([fileManager fileExistsAtPath:dataPath] == NO)
    {
        [fileManager copyItemAtPath:[[openDlg URLs] objectAtIndex:0] toPath:[[NSBundle mainBundle] bundlePath] error:&error];
        NSLog(@"File copied");

    }
}

Проблема в том, что я могу выбрать файлы любого типа (не только aif, wav, mp3 и т. Д.) И никогда не получаю File copied, Хотя пути верны. Когда я удаляю оператор if, я получаю сообщение об ошибке: [NSURL fileSystemRepresentation]: unrecognized selector sent to instance 0x1005a0b90, Что не так в этом коде?

1 ответ

Решение

Вы передаете NSURL к API, который ожидает путь в NSString, Вы можете рассмотреть возможность использования API на основе URL:

- (BOOL)copyItemAtURL:(NSURL *)srcURL toURL:(NSURL *)dstURL error:(NSError **)error NS_AVAILABLE(10_6, 4_0);

Как это:

[fileManager copyItemAtURL: [[openDlg URLs] objectAtIndex:0] toURL: [NSURL fileURLWithPath: [[NSBundle mainBundle] bundlePath]] error:&error];

Кроме того, я предполагаю, что файл уже был скопирован в комплект, так как ваше описание указывает, что [fileManager fileExistsAtPath:dataPath] возвращается NO (поскольку ваш NSLog никогда не выполняется.) Вы можете проверить это вручную или задать NSFileManager удалить любой существующий файл перед копированием во вновь выбранный файл.

Другие вопросы по тегам