12

例如,我的应用程序中有一堆目录和文件images/misc/mainmenu_background.。我在“iPad Simulator 3.2”中运行以下代码:

NSString *images = [[NSBundle mainBundle] pathForResource:@"images" ofType:nil];
NSString *images_misc = [[NSBundle mainBundle] pathForResource:@"images/misc" ofType:nil];
NSString *images_misc_file = [[NSBundle mainBundle] pathForResource:@"images/misc/mainmenu_background.png" ofType:nil];

在此调用之后,images包含路径/Users/wic/Library/Application Support/iPhone Simulator/3.2/Applications/8F67150B-71E6-4735-8CC6-38B3CE6D3568/Foo.app/images

但是images_misc并且images_misc_filenil。仔细检查我的文件系统以检查文件是否存在:

$ ls -l "/Users/wic/Library/Application Support/iPhone Simulator/3.2/Applications/8F67150B-71E6-4735-8CC6-38B3CE6D3568/Foo.app/images/misc/mainmenu_background.png"
-rw-rw-rw-  1 wic  staff  30307 16 Feb 21:09 /Users/wic/Library/Application Support/iPhone Simulator/3.2/Applications/8F67150B-71E6-4735-8CC6-38B3CE6D3568/Foo.app/images/misc/mainmenu_background.png

显然文件在那里。

如果我切换到“iPad Simulator 4.0”或任何其他模拟器版本,一切都会按预期工作。

我的设置是否有问题,或者NSBundle在 iPad 3.2 中这种行为是否正确?不幸的是,我没有实际的物理 iPad 来测试它。

4

2 回答 2

23

如果您需要访问目录中的文件,则应-[NSBundle pathForResource:ofType:inDirectory:]改为使用。所以你的代码应该看起来像

NSString *images_misc_file = [[NSBundle mainBundle] pathForResource:@"mainmenu_background" ofType:@"png" inDirectory:@"images/misc"];
于 2011-02-16T22:46:37.933 回答
10

尽管已经回答了这个问题,但我想补充一下,它-[NSBundle pathForResource:ofType:inDirectory:]具有不同的大小写敏感性,具体取决于它是 iPhone 模拟器、iPad 模拟器还是设备。例如,iPhone Simulator 4.0 似乎不区分大小写,而在 iPad Simulator 3.2 和设备上 - 区分大小写。因此,如果情况不匹配,在 iPhone 4.0 模拟器上找到的文件可能无法在 iPad 模拟器 3.2 或设备上找到。

于 2011-10-26T17:45:14.677 回答