NSBundle pathForResource returns nil with subdirs
I have a bunch of directories and files in my app, for instance images/misc/mainmenu_background.
. I'm running the following code in the "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];
After this call, images
contains the path /Users/wic/Library/Application Support/iPhone Simulator/3.2/Applications/8F67150B-71E6-4735-8CC6-38B3CE6D3568/Foo.app/images
.
But images_misc
and images_misc_file
are nil
. Double-checking my file system to check if the file is there:
$ 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
Apparently the file is there.
If I switch to "iPad Simu开发者_开发百科lator 4.0", or any other simulator version for that matter everything works as expected.
Is there something wrong with my setup, or is this correct behavior for NSBundle
in iPad 3.2? I have no actual physical iPad to test it on unfortunately.
If you need to access a file in a directory, you should be using -[NSBundle pathForResource:ofType:inDirectory:]
instead. So your code should instead look like
NSString *images_misc_file = [[NSBundle mainBundle] pathForResource:@"mainmenu_background" ofType:@"png" inDirectory:@"images/misc"];
Even though this has been answered already, I would like to add that -[NSBundle pathForResource:ofType:inDirectory:]
has different case-sensitivity depending whether it is iPhone simulator or iPad simulator or the device. For example, iPhone Simulator 4.0 it seems to be case insensitive, while on iPad Simulator 3.2 and the device - case sensitive. Thus files that are found on iPhone 4.0 simulator might not be found on IPad Simulator 3.2 or the device if the cases don't match.
精彩评论