如果其中有“Contents”文件夹,为什么我的包不能被使用?

时间:2012-09-07 10:35:16

标签: ios xcode macros bundle

我的包名是“sdk.bundle”。我使用此代码获取一个包:

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

你问的是pathForResource:的NSBundle对象。这显式查看了bundle的Contents / Resources文件夹。但是,看起来只是查看捆绑包的根目录是一种后退。

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

  

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

Source NSBundle docs