如何在iPhone应用程序中获取文件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的文件夹,这个文件夹位于Xcode中的一个名为Tiles的组中,该组直接位于Resources组中。

当我运行我的应用程序,我得到一个简单的错误,说它无法在生成的目录(上面的一个引用)find我的瓷砖如果我replace这段代码,并使其:

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

然后我的应用程序正常工作 这显然是因为它发现我的瓷砖在我的Mac上的直接位置。 这对testing来说很好,但我需要它在我的iPhone / iPad上工作。

这个问题可能是由于:

  • 生成的目录不正确。
  • 平铺图像没有包含在build立的.app文件中。

无论哪种方式,我不知道该怎么做来解决这个问题。

我怎么解决这个问题?


[编辑]

我将这段代码改为:

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

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

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

我怎样才能确保我的应用程序文件中的目录,如xxxx.app/Tiles – TileMap这样做。

请记住,您在xcode中制作的“文件夹/组”,那些黄色的文件夹/组不会在您的iPhone应用程序中反映为真实文件夹。 他们只是在那里来构build你的XCode项目。 您可以根据需要嵌套许多黄色组,并且它们仍然只用于在XCode中组织代码。

编辑

在XCode之外创build一个文件夹,然后拖动它,然后在popup窗口中select“为所有添加的文件夹创build文件夹引用”,而不是“为任何添加的文件夹创build组”。

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

这里是一个例子:

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

如果您的图块不在您的包中,可以从包中复制或从网上下载,您可以像这样获取目录

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

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

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

它会给你一个合适的URL参考。

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