0

私のバンドル名は「sdk.bundle」です。このコードを使用してバンドルを取得します。

NSBundle * bundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"sdk" ofType:@"bundle"]];
NSString * filePath = [bundle pathForResource:@"bg" ofType:@"png"];

バンドルには値があります。バンドルの絶対パスを出力できます。しかし、filePath は nil です。これは私のバンドルの構造体です:

SampleApp.app
   |----SampleApp
   |----Info.plist
   |----sdk.bundle
   |        |----Contents
   |        |        |----Resources
   |        |                 |----1.png
   |        |                 |----2.png
   |        |----bg.png
   |        |.....
   |......

Contents フォルダーを削除すると、すべてが正常に機能します。filePath には値があります。誰かヒットさせてくれませんか?

4

2 に答える 2

0

すべてのアプリには Contents フォルダーがあります。Mac でもこれを確認できます。アプリケーションを右クリックし、[パッケージの内容を表示] を選択すると、その中に「Contents」フォルダが表示されます。

于 2012-09-07T10:38:26.000 に答える
0

NSBundle オブジェクトに を求めていますpathForResource:。これは、バンドルの Contents/Resources フォルダーを明示的に検索します。ただし、バンドルのルートを調べるだけのフォールバックがあるようです。

これは、OS X ではバンドルに常に Contents フォルダーがあるためだと思われます。ただし、iOS では、Contents フォルダーが存在しない場合、ルート フォルダーを検索するだけです。

このメソッドは、最初に、指定されたバンドルのローカライズされていないリソース ディレクトリで一致するリソース ファイルを探します。(OS X では、このディレクトリは通常 Resources と呼ばれますが、iOS ではメイン バンドル ディレクトリです。) 一致するリソース ファイルが見つからない場合、利用可能な言語固有の「.lproj」ディレクトリの最上位を検索します。 . (言語固有のディレクトリの検索順序は、ユーザーの設定に対応しています。) これらの場所の他のサブディレクトリを再帰的に検索することはありません。

ソース NSBundle ドキュメント

于 2012-09-07T11:15:45.530 に答える