在 Cocoa/C++ 中使用相对路径加载资源

Posted

技术标签:

【中文标题】在 Cocoa/C++ 中使用相对路径加载资源【英文标题】:Using Relative Paths to Load Resources in Cocoa/C++ 【发布时间】:2010-05-10 07:12:52 【问题描述】:

我目前是第一次直接使用 Cocoa 来构建屏幕保护程序。现在我在尝试从.saver 包中加载资源时遇到了一个问题。我基本上有一个小的 C++ 包装类来使用 freeImage 加载 .exr 文件。只要我使用绝对路径,这就会起作用,但这不是很有用,是吗?所以,基本上,我尝试了一切:将.exr 文件放在.saver 包本身的级别,放在包资源文件夹中,等等。

然后我只是尝试像这样加载.exr,但没有成功:

particleTex = [self loadExrTexture:@"ball.exr"];

我还尝试将其转到 .saver 捆绑位置,如下所示:

particleTex = [self loadExrTexture:@"../../../ball.exr"];

...可能从该位置加载.exr,但没有成功。

然后我遇到了这个:

NSString * path = [[NSBundle mainBundle] pathForResource:@"ball" ofType:@"exr"];
const char * pChar = [path UTF8String];

...这似乎是在 Cocoa 中查找资源的常用方法,但由于某种原因,在我的情况下它是空的。有什么想法吗? 我真的尝试了我想到的任何事情但没有成功,所以我很高兴有一些意见!

【问题讨论】:

好吧,我刚刚发现 NSString * path = [[NSBundle mainBundle] bundlePath];将我指向运行我的屏幕保护程序的 ScreenSaver.app,所以我猜资源需要与此相关?我该怎么做? 【参考方案1】:

您应该使用 NSBundle bundleWithIdentifier: 而不是 mainBundle 来获取对您的屏幕保护程序包的引用。

来自讨论部分:

此方法通常用于 要定位的框架和插件 在运行时他们自己的包。这 方法可能更有效 而不是尝试使用 bundleForClass: 方法。

【讨论】:

谢谢,这正是我想要的!

以上是关于在 Cocoa/C++ 中使用相对路径加载资源的主要内容,如果未能解决你的问题,请参考以下文章

creator3.0设置文件相对路径

Vue项目打包后的资源引用如何使用相对路径

如何读取项目资源?(加载文件)

在 Java 中使用相对路径打开资源

如何在 Play Framework 2.0 中使用相对路径访问资源文件?

java 加载动态链接库怎么使用相对路径