0

我的包名称是“sdk.bundle”。我使用此代码获取捆绑包:

NSBundle * bundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"sdk" ofType:@"bundle"]];
NSString * filePath = [bundle pathForResource:@"bg" ofType:@"png"];

捆绑包具有值。我可以打印包的绝对路径。但是 filePath 是 nil。这是我的包的结构:

SampleApp.app
   |----SampleApp
   |----Info.plist
   |----sdk.bundle
   |        |----Contents
   |        |        |----Resources
   |        |                 |----1.png
   |        |                 |----2.png
   |        |----bg.png
   |        |.....
   |......

当我删除 Contents 文件夹时,一切正常!filePath 有值。任何人都可以给我一些打击吗?

4

2 回答 2

0

您正在向 NSBundle 对象询问pathForResource:. 这显式地在包的 Contents/Resources 文件夹中查找。但是,似乎有一种回退方式,只是查看捆绑包的根目录。

我怀疑这是因为在 OS X 上,捆绑包总是有 Contents 文件夹。但是,在 iOS 上,如果没有 Contents 文件夹,它们不会这样,它只会在根文件夹中查找。

该方法首先在指定包的非本地化资源目录中查找匹配的资源文件。(在 OS X 中,此目录通常称为 Resources,但在 iOS 中,它是主包目录。)如果找不到匹配的资源文件,它会查找任何可用的特定语言“.lproj”目录的顶层. (特定语言目录的搜索顺序与用户的偏好相对应。)它不会在这些位置的任何其他子目录中递归。

源 NSBundle 文档

于 2012-09-07T11:15:45.530 回答
0

每个应用程序内部都有一个 Contents 文件夹。您甚至可以在您的 Mac 上看到这一点,右键单击应用程序并选择显示包内容,您将在其中看到一个“内容”文件夹。

于 2012-09-07T10:38:26.000 回答