Как правильно закрывать NSOpenPanel?

Рейтинг: 0Ответов: 1Опубликовано: 19.03.2015

Всем доброго времени суток.

Мне нужно загрузить список файлов из директории. Для этого я использую метод beginSheetModalForWindow:completionHandler: , затем выбираю директорию и нажимаю OK. В моем случае после OK вызывается метод addToList: который условно загружает файлы и панель NSOpenPanel не закрывается до тех пор пока метод addToList: не закончить свою работу. Если нужно вызвать sheet с NSProgressIndicator который показывает статус загрузки файлов то он всплывает поверх NSOpenPanel. Мне это многообразие sheet'ов не нравится и я решил этот вопрос вызовом метода close для NSOpenPanel перед вызовом sheet с прогрессом.

Например:

NSOpenPanel *panel = [NSOpenPanel openPanel];
[panel beginSheetModalForWindow:window completionHandler:^(NSInteger result) {
        if (result == NSOKButton) {

            [panel close]; //<--- Закрываю sheet c NSOpenPanel

            [NSApp beginSheet:progressSheet modalForWindow:window modalDelegate:nil 
               didEndSelector:nil contextInfo:nil]; //<--- Открываю sheet c индикатором прогресса

            [self addToList:panel.URL]; // <--- загружаю файлы

            [progressSheet orderOut:self];  //
            [NSApp endSheet:progressSheet]; //<--- Закрываю sheet c индикатором прогресса

        }
     }];

Является ли мое решение с вызовом [panel close] правильным выбором. И как подобные веши реализовываете Вы?

Всех зарание благодарю.

Ответы

Ответов пока нет.