【问题标题】:Cocoa - Load resource from non-main bundlesCocoa - 从非主包加载资源
【发布时间】:2012-01-11 03:00:10
【问题描述】:

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

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

所以我将它替换为 +[NSBundle pathForResource:ofType:inDirectory:] 并且效果很好。但是,资源加载代码应该知道“inDirectory:”的捆绑路径,这很不方便。如果将捆绑包移动到其他路径,它将不起作用。

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

【问题讨论】:

    标签: macos cocoa resources nsbundle


    【解决方案1】:

    我不完全确定您要完成什么,但如果您想在不使用包的直接路径的情况下加载包资源,您可以使用[NSBundle bundleForClass:] 或[NSBundle bundleWithIdentifier:]。获得对所需捆绑包实例的引用后,您可以按如下方式访问其内容:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多