Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 使用NSURL访问包内的文件路径_Cocoa_Path - Fatal编程技术网

Cocoa 使用NSURL访问包内的文件路径

Cocoa 使用NSURL访问包内的文件路径,cocoa,path,Cocoa,Path,我需要访问包文件内容中的文件“数据”,该文件是另一个应用程序使用的项目文件。 该包可以在任何可用卷上的任何位置。 因此,在我的应用程序中,我要求用户定位他的项目,因此我获得了项目路径。 项目文件中的结构始终相同。因此,我可以通过将项目“base”路径与其内容目录的路径附加到数据文件中来定位数据文件 但是当我打印路径时,所有目录都会正常,但是包文件名会被撤销。 如果我只打印基本路径,我会得到正确的路径,包括末尾的包。就像它的状态不能出现在路径的中间。 我也尝试过[NSBundle bundleWi

我需要访问包文件内容中的文件“数据”,该文件是另一个应用程序使用的项目文件。 该包可以在任何可用卷上的任何位置。 因此,在我的应用程序中,我要求用户定位他的项目,因此我获得了项目路径。 项目文件中的结构始终相同。因此,我可以通过将项目“base”路径与其内容目录的路径附加到数据文件中来定位数据文件

但是当我打印路径时,所有目录都会正常,但是包文件名会被撤销。 如果我只打印基本路径,我会得到正确的路径,包括末尾的包。就像它的状态不能出现在路径的中间。

我也尝试过
[NSBundle bundleWithPath]
,但它返回
nul
。虽然取景器不把项目文件看作一个包,但它只是一个包文件,它只是绝望中的最后一个调用。p> 代码如下:

` NSOpenPanel *getPath = [NSOpenPanel openPanel];
NSArray* fileTypes = [[NSArray alloc] initWithObjects:@"logicx", nil];
[getPath setCanChooseFiles:YES];
[getPath setCanChooseDirectories:NO];
[getPath setTreatsFilePackagesAsDirectories:NO];
[getPath setTitle:@"Select your Logic Pro X project file"];
[getPath setAllowedFileTypes:fileTypes];
[getPath setCanCreateDirectories:YES];



NSInteger clicked = [getPath runModal];
if (clicked == NSFileHandlingPanelOKButton) {
    for (NSURL *basePath in [getPath URLs]){

        NSURL *url = [NSURL URLWithString:(@"Alternatives/000/ProjectData") relativeToURL:basePath]; 
//“Alternations/000/ProjectData”是包文件的子路径

        NSURL *absURL = [url absoluteURL];


        NSLog(@"absURL = %@",absURL); `
项目包文件名为:“Track Patch.logicx”

如果我打印
basePath
我得到:
file:///Volumes/Media/Music/Logic/Track%20Patch.logicx

如果打印所需路径的
absURL
,则得到
absURL=file:///Volumes/Media/Music/Logic/Alternatives/000/ProjectData

包裹轨道补丁已经在这里被丢弃了

如果我打印url(指针),我会得到这个
absURL=alternations/000/ProjectData--file:///Volumes/Media/Music/Logic/Track%20Patch.logicx

因此路径是反向的,这让我觉得
[NSURL URLWithString:relativeToURL:basePath]有问题函数。顺便问一下,
-
是什么意思


任何帮助都将不胜感激。

关于
URLWithString:relativeToURL:
的文档说,您需要一个尾随斜杠来处理目录

“您可以通过提供文件夹的URL来构造文件的URL 作为基本路径(带尾随斜杠)”

您可以使用
URLByAppendingPathComponent
方法来解决此问题,如下所示:

NSURL *url = [basePath URLByAppendingPathComponent:@"Alternatives/000/ProjectData"];
“如果原始URL未以正斜杠结尾,则 pathComponent不是以正斜杠开始的,正斜杠是 插入到返回URL的两部分之间,除非 原始URL是空字符串。“


URLWithString:relativeToURL:
的文档中说,您需要一个尾随斜杠来处理目录

“您可以通过提供文件夹的URL来构造文件的URL 作为基本路径(带尾随斜杠)”

您可以使用
URLByAppendingPathComponent
方法来解决此问题,如下所示:

NSURL *url = [basePath URLByAppendingPathComponent:@"Alternatives/000/ProjectData"];
“如果原始URL未以正斜杠结尾,则 pathComponent不是以正斜杠开始的,正斜杠是 插入到返回URL的两部分之间,除非 原始URL是空字符串。“


我真的不明白你在问什么。“Alternations/000/ProjectData”是您希望在包中查看的子路径吗?是的,很抱歉,如果我不够清楚,我将编辑此帖子以澄清这一点。谢谢你我真的不明白你在问什么。“Alternations/000/ProjectData”是您希望在包中查看的子路径吗?是的,很抱歉,如果我不够清楚,我将编辑此帖子以澄清这一点。谢谢谢谢你贾斯汀,这就解决了;)再次感谢您花时间解释为什么我的功能不合适!谢谢你,贾斯汀,这就解决了它;)再次感谢您花时间解释为什么我的功能不合适!