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

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

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

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

例如,读取一个二进制文件:

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

这总是失败和打印wrong

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

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

谢谢,

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

一个常见的方法是获取包中文件的path名:

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

如果您的软件包中有非标准位置的其他文件,则pathForResource会有变化,可以指定一个目录名称。

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

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

在Xcode文档库中search“Bundle编程指南”以开始使用。 🙂

为此使用NSBundle类。 例如:

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

事实上,即使你使用“initializeWithFileAtPath”,调用[is open]也是需要的。 我会认为初始化会自动打开你的文件,但它不会。