12

たとえば、アプリにはたくさんのディレクトリとファイルがありますimages/misc/mainmenu_background.。「iPadSimulator3.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_miscimages_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

どうやらファイルはそこにあります。

「iPadSimulator4.0」、またはその他のシミュレータバージョンに切り替えると、すべてが期待どおりに機能します。

私のセットアップに何か問題がありますか、それともNSBundleiPad 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では大文字と小文字が区別されないようですが、iPadSimulator3.2とデバイスでは大文字と小文字が区別されます。したがって、ケースが一致しない場合、iPhone4.0シミュレーターで検出されたファイルがIPadSimulator3.2またはデバイスで検出されない可能性があります。

于 2011-10-26T17:45:14.677 に答える