#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. Когда я пытаюсь выбрать символическую ссылку, я получаю то же поведение, что и вы, — я не могу ее выбрать. Тогда похоже, что это ошибка в Леопарде.