Cocoa - 从非主包加载资源
Posted
技术标签:
【中文标题】Cocoa - 从非主包加载资源【英文标题】:Cocoa - Load resource from non-main bundles 【发布时间】:2012-01-11 03:00:10 【问题描述】:我的应用程序加载了一些自定义捆绑包,并希望使用这些捆绑包中的资源。
似乎无法从主包实例中获取资源,例如 [NSBundle mainBundle] pathForResource:ofType:]。
所以我将它替换为 +[NSBundle pathForResource:ofType:inDirectory:] 并且效果很好。但是,资源加载代码应该知道“inDirectory:”的捆绑路径,这很不方便。如果将捆绑包移动到其他路径,它将不起作用。
还有其他方法可以解决这个问题吗?谢谢!
【问题讨论】:
【参考方案1】:我不完全确定您要完成什么,但如果您想在不使用包的直接路径的情况下加载包资源,您可以使用[NSBundle bundleForClass:]
或[NSBundle bundleWithIdentifier:]
。获得对所需捆绑包实例的引用后,您可以按如下方式访问其内容:
NSBundle myBundle = [NSBundle bundleWithIdentifier:@"com.my.identifier"];
[myBundle pathForResource:@"myResource" ofType:@"type"];
如果您希望它在捆绑包移动后仍然准确,那可能是一个更棘手的问题。正如文档所述,“一个 NSBundle 对象代表文件系统中的一个位置......”。如果该位置移动,则捆绑实例仍将在现有位置中查找。我认为您需要找出另一种机制来确定捆绑包是否已移动并从新位置重新创建您的 NSBundle 实例。
【讨论】:
以上是关于Cocoa - 从非主包加载资源的主要内容,如果未能解决你的问题,请参考以下文章
WTL强制资源从非mfc应用程序中的dll加载的方式? (我们使用的是 WTL/ATL,不是直接的 win32)