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 - 从非主包加载资源的主要内容,如果未能解决你的问题,请参考以下文章

从资源包(非主)加载本地化的 xib 文件

在 Cocoa/C++ 中使用相对路径加载资源

WTL强制资源从非mfc应用程序中的dll加载的方式? (我们使用的是 WTL/ATL,不是直接的 win32)

微信小程序的分包步骤

使用 Dispatcher.Invoke 从非主线程更改 WPF 控件

小程序---分包加载