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

Lou*_*ley 38 iphone xcode path ios

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

我目前正在使用

//Directly from TileMap example from WWDC2010
NSString *tileDirectory = [[[NSBundle mainBundle] resourcePath] 
                           stringByAppendingPathComponent:@"Tiles"];
Run Code Online (Sandbox Code Playgroud)

为我的访问我的瓷砖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";
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

我怎么解决这个问题?


[编辑]

我把那段代码更改为:

NSString *tileDirectory = [[NSBundle mainBundle] resourcePath];
Run Code Online (Sandbox Code Playgroud)

现在它在模拟器中工作,因为所有文件都在apps根文件夹中,我不要求它进入另一个名为"Tiles"的目录.

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

如何确保我的应用程序文件中的目录,例如xxxx.app/Tiles-TileMap执行此操作.

小智 44

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

这是一个例子:

NSString* filePath = [[NSBundle mainBundle] pathForResource:@"your_file_name" 
                                            ofType:@"the_file_extension"];
Run Code Online (Sandbox Code Playgroud)


Luc*_*uke 19

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

编辑

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


Joe*_*Joe 11

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

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