NSBundle pathForResource возвращает nil с подкаталогами - PullRequest
12 голосов
/ 17 февраля 2011

У меня есть куча каталогов и файлов в моем приложении, например 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_file равны nil. Дважды проверьте мою файловую систему, чтобы проверить, есть ли файл:

$ 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 для тестирования.

Ответы [ 2 ]

23 голосов
/ 17 февраля 2011

Если вам нужен доступ к файлу в каталоге, вы должны использовать -[NSBundle pathForResource:ofType:inDirectory:]. Таким образом, ваш код должен выглядеть как

NSString *images_misc_file = [[NSBundle mainBundle] pathForResource:@"mainmenu_background" ofType:@"png" inDirectory:@"images/misc"];
10 голосов
/ 26 октября 2011

Несмотря на то, что на этот вопрос уже дан ответ, я хотел бы добавить, что -[NSBundle pathForResource:ofType:inDirectory:] имеет различную чувствительность к регистру в зависимости от того, симулятор iPhone или iPad или устройство. Например, iPhone Simulator 4.0 кажется не чувствительным к регистру, а на iPad Simulator 3.2 и устройстве - чувствительным к регистру. Таким образом, файлы, найденные на имитаторе iPhone 4.0, могут не быть найдены на имитаторе IPad 3.2 или устройстве, если случаи не совпадают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...