如何访问项目中的本地文件

时间:2011-10-15 07:53:07

标签: iphone objective-c ios xcode bundle

我想在我的应用中添加一些静态文件(图像,二进制等)。我已将它们放在名为Resources的文件夹下,并将其添加到我的XCode项目中。

接下来,我将这些文件添加到项目设置的Copy Bundle Resources标签中的Build Phases

但是,我似乎无法以正确的方式提及它们。

例如,读取二进制文件:

NSInputStream *is = [[NSInputStream alloc] initWithFileAtPath:@"data.bin"];
if(![is hasBytesAvailable]) NSLog(@"wrong");

这总是失败&打印wrong

我尝试了NSData initWithContentsOfFile:的类似方法,但这甚至都不会执行。另一种尝试是使用[NSBundle mainBundle],但这也没有完全执行。

我是iOS新手,请帮助我访问我的本地文件!任何帮助将不胜感激。

谢谢,

3 个答案:

答案 0 :(得分:29)

您需要确保在正确的位置访问该文件。 Xcode将资源文件放在资源目录中的应用程序的“应用程序包”中。有很多方法可以挖掘它们。

常见的方法是获取捆绑包中文件的路径名:

NSBundle *mainBundle = [NSBundle mainBundle];
NSString *myFile = [mainBundle pathForResource: @"data" ofType: @"bin"];

如果您的捆绑包中有非标准位置的其他文件, pathForResource 会有一些变体,可让您指定目录名称。

如果您想查看模拟器正在使用的硬盘驱动器上的实际位置,您可以检查它,您可以说:

NSLog(@"Main bundle path: %@", mainBundle);
NSLog(@"myFile path: %@", myFile);

在Xcode文档库中搜索“Bundle Programming Guide”以开始使用。 : - )

答案 1 :(得分:1)

使用NSBundle类。例如:

NSString *path = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"bin"];
NSInputStream *is = [[NSInputStream alloc] initWithFileAtPath:path];
...

答案 2 :(得分:0)

即使你“initialiseWithFileAtPath”,也需要调用[打开]。我认为初始化会自动为你打开文件,但事实并非如此。