Почему я могу выбирать псевдонимы, но не символические ссылки в NSOpenPanel?

#cocoa #macos

Вопрос:

Я хочу создать NSOpenPanel файл, который может выбирать любой тип файла, поэтому я делаю это

 NSOpenPanel*    panel = [NSOpenPanel openPanel];

if([panel runModalForTypes:nil] == NSOKButton) {
    // process files here
}
 

что позволяет мне выбирать все файлы, кроме символических ссылок.
Они просто не выбираются, и это очевидно setResolvesAliases
ничего не делает.

Что это дает?

Обновление 1: Я провел еще несколько тестов и обнаружил, что эта странность
присутствует в Леопарде (10.5.5), но не в Тигре (10.4.8).

Обновление 2: Приведенный выше код может выбирать псевдонимы mac (постоянные
данные пути, которые хранятся в ветке ресурсов), но не символические ссылки (файлы, созданные с помощью ln-s).

Ответ №1:

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

Конечно, если символическая ссылка указывает на каталог, вы можете выбрать ее только в том случае, если выбор каталогов разрешен

 NSOpenPanel * panel = [NSOpenPanel openPanel];
[panel setCanChooseDirectories:YES];
if ([panel runModalForTypes:nil] == NSOKButton) {
    NSLog(@"%@", [panel filenames]);
}
 

Комментарии:

1. Если я добавлю вашу строку [panel setCanChooseDirectories:YES]; , я смогу выбрать символические ссылки, но я также могу выбрать каталоги, которые мне не нужны. Странно, что это работает на вас. Я так понимаю, ты не убегаешь от Леопарда.

Ответ №2:

Ваш пример кода также сработал для меня — я использую 10.5.5 и XCode 3.1, если это имеет значение.

Если псевдоним относится к каталогу, я не смог выбрать псевдоним, так как он был разрешен в каталоге, на который он указывал, а не в самом псевдониме (панель, похоже, разрешает псевдонимы по умолчанию). Тем не менее, я смог выбрать псевдоним для файла.

Комментарии:

1. Это моя точная установка. Итак, с помощью моего примера вы можете выбрать псевдоним для файла, а затем нажать кнопку «Открыть»?

2. Да — я скопировал вставил код, который вы включили в вопрос, в тестовое приложение, которое я только что создал.

3. На самом деле, это работает и для меня, но только тогда, когда файл является псевдонимом mac (своего рода постоянный путь, который находится в развилке ресурсов). Я все еще не могу выбрать символические ссылки (файлы, созданные с помощью ln-s).

4. Когда я пытаюсь выбрать символическую ссылку, я получаю то же поведение, что и вы, — я не могу ее выбрать. Тогда похоже, что это ошибка в Леопарде.