我想在我的应用中添加一些静态文件(图像,二进制等)。我已将它们放在名为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新手,请帮助我访问我的本地文件!任何帮助将不胜感激。
谢谢,
答案 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”,也需要调用[打开]。我认为初始化会自动为你打开文件,但事实并非如此。