Cocoa - 从非主要包中加载资源

时间:2012-01-11 03:00:11

标签: macos cocoa resources nsbundle

我的应用程序加载了一些自定义捆绑包,它希望使用这些捆绑包中的资源。

似乎无法从主bundle实例获取资源,例如[NSBundle mainBundle] pathForResource:ofType:]。

所以我用+ [NSBundle pathForResource:ofType:inDirectory:]替换它,它运行良好。但是资源加载代码应该知道“inDirectory:”的包路径是非常不方便的。如果将bundle移动到另一个路径,它将无法工作。

还有其他方法可以解决这个问题吗?谢谢!

1 个答案:

答案 0 :(得分:1)

我不完全确定您要完成的任务,但如果您想在不使用捆绑包的直接路径的情况下加载捆绑资源,则可以使用[NSBundle bundleForClass:][NSBundle bundleWithIdentifier:] 。一旦引用了所需包的实例,就可以按如下方式访问其内容:

NSBundle myBundle = [NSBundle bundleWithIdentifier:@"com.my.identifier"];
[myBundle pathForResource:@"myResource" ofType:@"type"];

如果你想让它在捆绑移动后仍然准确,那可能是一个棘手的问题。正如文档所述,“NSBundle对象表示文件系统中的位置......”。如果该位置移动,则包实例仍将查看现有位置。我认为你需要找出另一种机制来确定是否移动了bundle并从新位置重新创建了NSBundle实例。