2012-01-11 38 views
2

我的应用程序加载了一些自定义包,它希望使用这些包中的资源。Cocoa - 从非主包中加载资源

看来,这是不可能的从主包实例获得资源,如[一个NSBundle mainBundle] pathForResource:ofType:]。

所以我用+替换[:ofType:inDirectory:一个NSBundle pathForResource]和它工作得很好。但是资源加载代码应该知道“inDirectory:”的包路径是相当不方便的。如果捆绑包移动到另一个路径,它将不起作用。

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

回答

1

我不完全确定你要完成什么,但是如果你想加载一个束资源而不使用束的直接路径,你可以使用[NSBundle bundleForClass:][NSBundle bundleWithIdentifier:]。一旦你有你想要的包的实例的引用,您可以通过以下方式访问其内容:

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

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

+0

这正是我想要的!我忘了捆绑包有ID本身.. – notgeek 2012-01-14 05:09:21