在 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++ 中使用相对路径加载资源的主要内容,如果未能解决你的问题,请参考以下文章