У меня проблемы с пониманием новой Песочницы Льва.
Я знаю, что Lion включает в себя доверенный демон-процесс под названием Powerbox
, задачей которого является представление и управление диалоговыми окнами открытия / сохранения от имени изолированных приложений.
Как и в Руководстве по подписи кода и изолированной среде приложения , в нем говорится:
Каждый раз, когда приложение, запущенное в изолированной программной среде, вызывает диалоговое окно NSOpenPanel или NSSavePanel вместо непосредственного отображения панелей, AppKit автоматически запрашивает Powerbox для представления диалогового окна. С точки зрения разработчика, не требуется никаких изменений кода с точки зрения использования этих панелей; этот процесс полностью прозрачен.
После того, как пользователь выберет набор файлов или каталогов, Powerbox использует новые функциональные возможности в модуле ядра изолированной программной среды, чтобы расширить изолированную программную среду вызывающего приложения и разрешить доступ к выбранным файлам. К тому времени, когда код приложения запрашивает у панели возвращенные URL-адреса или имена файлов, у него уже есть разрешение на доступ к этим файлам, и он может продолжать использовать файлы практически через любой API, который он уже использует.
Ok. Я сделал несколько практических тестов, используя этот код:
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
?