我的包名是“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有值。任何人都能给我一些点击吗?
答案 0 :(得分:0)
每个应用都有一个内容文件夹。您甚至可以在Mac上看到这一点,右键单击某个应用程序并选择显示包内容,您将在其中找到一个“内容”文件夹。
答案 1 :(得分:0)
你问的是pathForResource:
的NSBundle对象。这显式查看了bundle的Contents / Resources文件夹。但是,看起来只是查看捆绑包的根目录是一种后退。
我怀疑这是因为在OS X上,bundle总是有Contents文件夹。但是,在iOS上,如果没有Contents文件夹,它们就不会这样,它只会查看根文件夹。
该方法首先在指定包的非本地化资源目录中查找匹配的资源文件。 (在OS X中,此目录通常称为资源,但在iOS中,它是主捆绑目录。)如果找不到匹配的资源文件,则它会查找任何可用语言特定的“.lproj”目录的顶层。 (特定于语言的目录的搜索顺序对应于用户的首选项。)它不会通过任何这些位置的其他子目录进行递归。