沙盒应用中的NSOpenPanel忽略提供的目录URL

时间:2015-09-03 15:56:45

标签: cocoa osx-yosemite nsurl appstore-sandbox nsopenpanel

我正在构建沙盒OS X应用程序(OS X 10.10.5,Xcode 6.4)。 在执行过程中,我打开NSOpenPanel对象。 然后我运行下一个片段:

NSString* s=[@"~" stringByExpandingTildeInPath]; 
NSOpenPanel* panel = [NSOpenPanel openPanel];
[panel setCanChooseDirectories:YES];
[panel setCanChooseFiles:NO];
NSURL* url=[NSURL fileURLWithPath:s];
if(url){
    [panel setDirectoryURL:url];
}
[panel setAllowsMultipleSelection:YES];
[panel beginSheetModalForWindow:[self.outlineView window]completionHandler:^(NSInteger result) {}

我的期望是该目录在目录 /Users/xxx/Library/Containers/com.123456.App /

中打开

而是在 / Users / xxx

目录中打开面板

应用程序实际构建并部署到目录/Users/xxx/Library/Containers/com.123456.App/Data /

在调试时我观察到了这一点:

if(url){
    [panel setDirectoryURL:url];
}

url 包含正确的值: file:///Users/xxx/Library/Containers/com.123456.App/Data/

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您是否有理由在应用容器中使用NSOpenPanel?容器适用于应用程序的内部数据/支持文件(用户通常不需要访问)。 NSOpenPanel / NSSavePanel用于用户从他们自己的文档中选择一个文件/目录,这些文档/目录不会位于容器中。

另外,请考虑使用NSFileManager URLsForDirectory:inDomains:将NSURL转换为所需的路径。