Технические вопросы и ответы QA1468

NSOpenPanel - Выбор любого файла и игнорирование пакетов

Q: Как делают я устанавливаю NSOpenPanel исключить пакеты файла?

A: Как делают я устанавливаю NSOpenPanel исключить пакеты файла?

Необходимо реализовать метод делегата:

- (BOOL)panel:(id)sender shouldShowFilename:(NSString*)filename

В этом методе необходимо отфильтровать объекты файловой системы, которые являются упакованными каталогами.

Средство поиска и NSOpenPanel обработайте упакованные каталоги по-другому, чем другие каталоги. Вместо того, чтобы вывести на экран содержание упакованного каталога, они обрабатывают его, как будто это был единственный файл. Упакованные каталоги обычно имеют расширение: .app, .bundle, .framework, .plugin, .kext. Если Ваше приложение хочет иметь дело с только файлами, исключая эти типы пакетов, необходимо изменить поведение NSOpenPanel.

Поскольку Вы устанавливаете Ваш NSOpenPanel, удостоверьтесь, что Вы становитесь его делегатом путем вызова:

[openPanel setDelegate: self];

Продолжите для реализации следующего метода делегата только позволить выбирать файлы и не пакеты.

Перечисление 1  метод делегата отфильтровать упакованные файлы.

- (BOOL)panel:(id)sender shouldShowFilename:(NSString*)filename
{
    BOOL showObject = YES;

    NSDictionary* fileAttribs = [[NSFileManager defaultManager]
                                    fileAttributesAtPath:filename traverseLink:YES];
    if (fileAttribs)
    {
        // check for packages
        if ([NSFileTypeDirectory isEqualTo:[fileAttribs objectForKey:NSFileType]])
        {
            if ([[NSWorkspace sharedWorkspace] isFilePackageAtPath:filename] == NO)
                showObject = YES; // it's a folder, OK to show
            else
                showObject = NO; // it's a packaged directory, don't show
        }
        else
        {
            showObject = YES; // it's a file, OK to show
        }
    }

    return showObject;
}


История версии документа


ДатаПримечания
25.01.2007

Новый документ, объясняющий, как сконфигурировать NSOpenPanel для фильтрации только пакетов игнорирования и файлов.