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]]; 

这意味着您不必担心方法调用的位置,它会从与您正在运行的目标相关的适当项目中获取资源。 非常适合制作图书馆和可重复使用的电话;)