如何在iPhone应用程序中获取文件路径

时间:2011-06-17 15:13:34

标签: iphone ios xcode path

我在使用应用程序访问文件时遇到问题。

我目前正在使用

//Directly from TileMap example from WWDC2010
NSString *tileDirectory = [[[NSBundle mainBundle] resourcePath] 
                           stringByAppendingPathComponent:@"Tiles"];

访问我的MKOverlay瓷砖。这给了我这个目录

  

/ Users / xxxx / Library / Application Support / iPhone Simulator / 4.2 / Applications / 9D62025C-C53B-472C-8309-xxxx / xxxx.app / Tiles

x仅出于隐私原因

我的磁贴在我的应用程序根目录中名为Tiles的文件夹中,该文件夹位于名为Tiles的组中的Xcode中,该组直接位于Resources组中。

当我运行我的应用程序时,我得到一个简单的错误,说它无法在生成的目录中找到我的磁贴(上面的一个引用)如果我替换了那段代码并使其成为:

NSString *tileDirectory = @"/Users/xxxx/Documents/xxxx/Tiles";

然后我的应用程序运行正常。这显然是因为它在我Mac上的直接位置找到了我的瓷砖。这适用于测试,但我需要它才能在我的iPhone / iPad上运行。

由于以下原因可能会发生此问题:

  • 生成的目录不正确。
  • 图块图片未包含在已构建的.app文件中。

无论哪种方式,我都不知道如何解决它。

我该如何解决这个问题?


[编辑]

我将这段代码更改为:

NSString *tileDirectory = [[NSBundle mainBundle] resourcePath];

现在它可以在模拟器中运行,因为所有文件都在apps根文件夹中,我不会要求它进入另一个名为" Tiles"的目录。

这在模拟器上运行没有错误,但是在我的iPhone上它会给出原始错误(只是一个不同的文件路径,但也以/xxxx.app

结尾

如何确保我的应用文件中的目录,例如xxxx.app/Tiles - TileMap会这样做。

5 个答案:

答案 0 :(得分:44)

由于它是您的应用包中的文件,我认为您可以使用pathForResource:ofType:来获取文件的完整路径名。

以下是一个例子:

NSString* filePath = [[NSBundle mainBundle] pathForResource:@"your_file_name" 
                                            ofType:@"the_file_extension"];

答案 1 :(得分:19)

请记住,您在xcode中制作的“文件夹/群组”,黄色的“文件夹/群组”不会反映在iPhone应用中的真实文件夹中。他们只是在那里构建您的XCode项目。您可以根据需要嵌套任意数量的黄色组,它们仍然只用于在XCode中组织代码。

修改

在XCode之外创建一个文件夹,然后将其拖过,并在弹出窗口中选择“为任何添加的文件夹创建文件夹引用”,而不是“为任何添加的文件夹创建组”。

答案 2 :(得分:11)

如果您的图块不在您的软件包中,无论是从软件包中复制还是从Internet下载,您都可以获得这样的目录

NSString *documentdir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *tileDirectory = [documentdir stringByAppendingPathComponent:@"xxxx/Tiles"];
NSLog(@"Tile Directory: %@", tileDirectory);

答案 3 :(得分:1)

您需要使用链接的URL,例如:

NSURL *path = [[NSBundle mainBundle] URLForResource:@"imagename" withExtension:@"jpg"];

它会为您提供正确的网址参考。

答案 4 :(得分:0)

您需要将资源添加到资源包中。我的意思是将所有这些文件添加到项目中,确保将所有文件复制到项目目录选项。