我的应用程序加载了一些自定义捆绑包,它希望使用这些捆绑包中的资源。
似乎无法从主bundle实例获取资源,例如[NSBundle mainBundle] pathForResource:ofType:]。
所以我用+ [NSBundle pathForResource:ofType:inDirectory:]替换它,它运行良好。但是资源加载代码应该知道“inDirectory:”的包路径是非常不方便的。如果将bundle移动到另一个路径,它将无法工作。
还有其他方法可以解决这个问题吗?谢谢!
答案 0 :(得分:1)
我不完全确定您要完成的任务,但如果您想在不使用捆绑包的直接路径的情况下加载捆绑资源,则可以使用[NSBundle bundleForClass:]
或[NSBundle bundleWithIdentifier:]
。一旦引用了所需包的实例,就可以按如下方式访问其内容:
NSBundle myBundle = [NSBundle bundleWithIdentifier:@"com.my.identifier"];
[myBundle pathForResource:@"myResource" ofType:@"type"];
如果你想让它在捆绑移动后仍然准确,那可能是一个棘手的问题。正如文档所述,“NSBundle对象表示文件系统中的位置......”。如果该位置移动,则包实例仍将查看现有位置。我认为你需要找出另一种机制来确定是否移动了bundle并从新位置重新创建了NSBundle实例。