pathForResource返回null

时间:2012-02-17 16:32:37

标签: objective-c xcode cocoa

我正在尝试在我的项目中加载一些.applescript文件。

将它们复制到“支持文件”目录中,如下所示:

enter image description here

并尝试访问它们:

NSBundle *bundle = [NSBundle mainBundle];
NSLog(@"Resource path for test.applescript: %@", [bundle pathForResource:@"test" ofType:@"applescript"]);

pathForResource始终返回null。

两个文件都在xcode中正确导入。目标会员资格是我的应用程序。 来自类似问题的解决方案并没有真正帮助

我做错了什么?

5 个答案:

答案 0 :(得分:148)

在Xcode目标“Build Phases”中添加“Copy Bundle Resources”下的文件。

答案 1 :(得分:5)

对于所有仍然获得nil路径并且文件被添加到" Copy Bundle Resources"只需从Copy Bundle Resources中删除该文件,然后重新添加。

答案 2 :(得分:1)

Zaph上面给出了很好的回应,但是当我这样做时,我注意到它的速度更快,至少在Xcode 6.1中是这样。

如果您单击该文件(例如test.applescript)并打开Xcode的右侧菜单,您将看到一个名为“Target Membership”的部分。确保选择了正确的目标(如您正在使用脚本的目标),并且它将执行与在“复制捆绑资源”下添加文件相同的工作

此外,并非完全相关,但如果您从几个不同的地方加载,或者您继承此类。你不应该真的使用

[NSBundle mainBundle];

改为使用

[NSBundle bundleForClass:[self class]];

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

答案 3 :(得分:0)

您的图片是否假定某个文件夹中的该文件?

在这种情况下尝试pathForResource:ofType:inDirectory:方法:

NSLog(@"Resource path for test.applescript: %@", [bundle pathForResource:@"test" ofType:@"applescript" inDirectory:@"folder/Supporting Files");

答案 4 :(得分:0)

除了Zaph所说的,请确保您没有参与'发布'模式。

曾经有一段时间我忘记更改设置,并且符号被剥离,从而使NSBundle无法解析路径。