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

Posted

技术标签:

【中文标题】如何在 iPhone 应用程序中获取文件路径【英文标题】:How to get file path in iPhone app 【发布时间】:2011-06-17 15:13:33 【问题描述】:

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

我正在使用

//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 的文件夹中,该文件夹位于 Xcode 中的一个名为 Tiles 的组中,该组直接位于 Resources 组中。

当我运行我的应用程序时,我收到一个简单的错误,说它在生成的目录中找不到我的图块(上面的一个引号)如果我替换那段代码并制作它:

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

然后我的应用程序运行良好。这显然是因为它在我的 Mac 上的直接位置找到了我的图块。这对于测试来说很好,但我需要它在我的 iPhone/iPad 上工作。

出现此问题的原因可能是:

生成的目录不正确。 平铺图像未包含在构建的 .app 文件中。

不管怎样,我不知道该怎么做才能解决它。

我该如何解决这个问题?


[编辑]

我把那段代码改成:

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

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

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

如何确保我的应用程序文件中有一个目录,例如 xxxx.app/Tiles - TileMap 可以做到这一点。

【问题讨论】:

【参考方案1】:

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

这是一个例子:

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

【讨论】:

如果我的文件不在捆绑包中,而是在具有iosandroid 平台的离子项目中。所以在一类 ios 文件夹中,我提到了文件,所以我该怎么做,我试过这会出错【参考方案2】:

请记住,您在 xcode 中创建的“文件夹/组”是黄色的,它们不会在您的 iPhone 应用程序中反映为真正的文件夹。它们只是用来构建您的 XCode 项目。您可以根据需要嵌套任意数量的黄色组,它们仍然仅用于在 XCode 中组织代码。

编辑

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

【讨论】:

你绝对是在正确的轨道上! (谢谢)我到底如何确保我的目标中的目录为 Tiles ? TileMap 做到了,但我似乎看不到 Apple 是如何做到的...... 完美运行!谢谢! PS:现在我也明白递归组/文件夹引用更好。谢谢! 呃,谢谢你,我花了半个小时来研究文件路径,然后才偶然发现这个答案,并对我在 Xcode 中创建的这些不是真正文件夹的文件“组”感到震惊。 . 如何通过引用获得?【参考方案3】:

如果您的拼贴不在您的捆绑包中,无论是从捆绑包中复制还是从互联网下载,您都可以获得这样的目录

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

【讨论】:

【参考方案4】:

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

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

它会给你一个正确的 URL ref。

【讨论】:

【参考方案5】:

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

【讨论】:

以上是关于如何在 iPhone 应用程序中获取文件路径的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iPhone 中快速从文件路径 url 获取视频或图像?

如何在 Objective-C 中获取当前工作目录的绝对路径?

浏览 iphone 上的文件以获取崩溃日志

如何仅获取保存在iphone应用程序文档文件夹中的所有照片名称

在我的应用程序中复制 iphone 库的音乐文件

如何从 iPhone 邮件和 safari 中获取 ppt 文件?