pathForResource返回null
我想在我的项目中加载一些.applescript文件。
将它们复制到“支持文件”目录中,如下所示:
并试图访问它们:
NSBundle *bundle = [NSBundle mainBundle]; NSLog(@"Resource path for test.applescript: %@", [bundle pathForResource:@"test" ofType:@"applescript"]);
pathForResource总是返回null。
这两个文件都正确地导入到xcode中。 目标会员是我的应用程序。 类似问题的解决scheme并没有真正的帮助
我究竟做错了什么?
在Xcode目标“Build Phases”中添加“Copy Bundle Resources”下的文件。
对于所有那些仍然得到一个零path和文件被添加到“复制捆绑软件资源”只是从复制捆绑软件资源中删除该文件,而不是再次添加。
你的图片是否假设该文件在某个文件夹中?
在这种情况下尝试pathForResource:ofType:inDirectory:
方法:
NSLog(@"Resource path for test.applescript: %@", [bundle pathForResource:@"test" ofType:@"applescript" inDirectory:@"folder/Supporting Files");
除了Zaph所说的之外,确保你没有在“释放”模式下运行。
有一段时间,我忘了改变这个设置,并且符号被剥离,从而使NSBundle不能解决path。
Zaph上面的反应非常好,但是我注意到当我这样做时,至less在Xcode 6.1中有更快的方法。
如果您单击该文件(例如test.applescript)并打开Xcode的右侧菜单,则会看到一个名为“目标成员”的部分。 确保select了正确的目标(就像你正在使用该脚本的那个目标一样),它将执行与“Copy Bundle Resources”下的添加文件相同的工作。
此外,不完全相关,但如果你从几个不同的地方加载,或者你是inheritance这个类。 你不应该使用
[NSBundle mainBundle];
反而使用
[NSBundle bundleForClass:[self class]];
这意味着您不必担心方法调用的位置,它会从与您正在运行的目标相关的适当项目中获取资源。 非常适合制作图书馆和可重复使用的电话;)