我在理解新狮子座的时候遇到了一些问题。
我知道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之间的联系吗?
发布于 2011-07-29 09:43:50
与苹果联系后,我可以确认Rob所写的内容:NSOpenSavePanelDelegate方法无法访问沙箱应用程序中的文件系统。
https://stackoverflow.com/questions/6844383
复制相似问题