NSSavePanel и Песочница - PullRequest
       46

NSSavePanel и Песочница

8 голосов
/ 27 июля 2011

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

Я знаю, что 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?

1 Ответ

9 голосов
/ 29 июля 2011

После обращения в Apple я могу подтвердить, что Роб Кенигер написал: NSOpenSavePanelDelegate метод не имеет доступа к файловой системе в изолированных приложениях.

...