Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 Simulator 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.

like image 729
Martin Wickman Avatar asked Feb 16 '11 21:02

Martin Wickman


2 Answers

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"];
like image 169
Lily Ballard Avatar answered Nov 06 '22 16:11

Lily Ballard


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.

like image 10
mt_ Avatar answered Nov 06 '22 17:11

mt_