NSSavePanel и песочница

У меня есть некоторые проблемы с пониманием новой песочницы Lion.

Я знаю, что Lion включает доверенный процесс демона, называемый Powerbox , чья работа заключается в отображении и управлении диалоговыми окнами открытия / сохранения от имени изолированных приложений.

Как и в Руководстве по подписанию кода и изолированной программной среде приложений говорится:

Каждый раз, когда приложение, работающее внутри песочницы, вызывает диалог NSOpenPanel или NSSavePanel, вместо того, чтобы показывать панели напрямую, AppKit автоматически просит Powerbox представить диалог. С точки зрения разработчика, никаких изменений кода в отношении того, как используются эти панели, не требуется; этот процесс полностью прозрачен.

После того, как пользователь выберет набор файлов или каталогов, Powerbox использует новые функции в модуле ядра песочницы, чтобы расширить изолированную программную среду вызывающего приложения, чтобы разрешить доступ к выбранным файлам. К тому времени, когда код приложения запрашивает у панели возвращенные URL-адреса или имена файлов, оно уже имеет разрешение на доступ к этим файлам и может продолжать использовать файлы почти через любой API, который он уже использует.

Хорошо. Я провел несколько практических тестов, используя этот код:

NSSavePanel *savePanel = [NSSavePanel savePanel];
savePanel.delegate = self;

savePanel.directoryURL = ...;
savePanel.nameFieldStringValue = ...;

[savePanel beginSheetModalForWindow:self.window
                  completionHandler:^(NSInteger returnCode) {
/* the completion handler */
}];

Странно то, что методы NSOpenSavePanelDelegate , которые вызываются ПЕРЕД обработчиком завершения, не имеют доступа к файлам в файловой системе .

Это правильно?

Но если это так, методы делегата, такие как panel: validateURL: error: , становятся бесполезными!

Не могли бы вы помочь мне более подробно объяснить связи между приложением и Powerbox ?

8
задан Dev 27 July 2011 в 12:35
поделиться