如何访问项目中的本地文件
我想添加一些静态文件(图像,二进制等)到我的应用程序。 我把它们放在一个名为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]也是需要的。 我会认为初始化会自动打开你的文件,但它不会。