我正在构建沙盒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/
有什么想法吗?
答案 0 :(得分:1)
您是否有理由在应用容器中使用NSOpenPanel
?容器适用于应用程序的内部数据/支持文件(用户通常不需要访问)。 NSOpenPanel
/ NSSavePanel
用于用户从他们自己的文档中选择一个文件/目录,这些文档/目录不会位于容器中。
另外,请考虑使用NSFileManager
URLsForDirectory:inDomains:
将NSURL转换为所需的路径。