39

xcode と objc を使用して単純なアプリケーションを作成しており、ファイルから NSDictionary をロードする必要がありますが、NSBundle を使用してファイルへのパスを取得できません。

NSString *l = [[NSBundle mainBundle] pathForResource:@"LoginStatuses" ofType:@"plist"];
NSLog(@"%@", l);

このコードを実行すると、次のようになります。

2010-10-16 10:42:42.42 サンプル[5226:a0f] (ヌル)

理由はわかりません。

Resources というグループを作成し、そこに LoggingStatuses.plist を追加しました。 解像度

4

9 に答える 9

64

ソースを入手した後のこの問題の解決策は次のとおりです。

投稿されたスクリーンショットにはあまり注意を払っていませんでしたが、ターゲットのタイプは「コマンドラインツール」です...そしてそれらにはバンドルがないため、[NSBundle mainBundle]もちろんnilが返されます。Xcode が「 Copy Bundle Resources 」ステップを実行できないと文句を言わず、黙ってスキップするのはかなり誤解を招きます。

解決策は、「 Application 」タイプの新しいターゲットを追加するだけで、バンドルベースのアプリケーションが生成されます。次に、この新しいターゲットのすべてのソースとリソースの [ターゲット メンバーシップ]チェックボックスをオンにします。その場合、plist パスは正しく解決されます。

于 2010-10-16T18:31:56.403 に答える
53

iPhoneアプリでデフォルトのsqliteデータベースを使用しようとしましたが、darnアプリで見つかりませんでした。.sqliteファイルがバンドルリソースにあることを確認する必要があることがわかりました。

  1. プロジェクトを選択します
  2. ターゲットを選択
  3. [ビルドフェーズ]タブを選択します
  4. 「バンドルリソースのコピー」というラベルの付いたセクションを開きます
  5. .sqliteファイルをこのセクションにドラッグアンドドロップします。

これで、アプリはこのデフォルトのsqliteデータベースを見つけます。

于 2012-09-04T02:43:08.370 に答える
22

ファイルは本当にターゲットに含まれていますか (したがって、バンドルにコピーされますか) ? それを見つけて設定するには、次の 2 つの方法があります。

最初の方法: ファイルを右クリック (または Cmd クリック) し、[情報を見る] を選択します。次に、[ターゲット] タブをクリックし、目的のターゲットについてファイルがチェックされていることを確認します。

2 番目の方法: プロジェクト ブラウザのファイル ブラウザのヘッダーを右クリック (または Cmd-clock) します (「Groups & Files」と表示されます)。次に「対象会員」を選択します。これで、ターゲットのメンバーになることができる各ファイル (.m ファイルやリソースなど) の横にチェックボックスが表示されます。繰り返しますが、ファイルの横にあるチェックボックスがオンになっていることを確認してください。

于 2010-10-16T15:05:29.247 に答える
5

ここでググったので、答えが見つかりませんでしたが、自分で見つけたので、ここに残します...

Retina用のtray.pngtray@2x.pngの2つのファイルがありました。ファイルは「Copy Bundle Resources」に自動的に追加されました。

しかし:

[[NSBundle mainBundle] pathForResource:@"tray" ofType:@"png"];

実際にバンドルにコピーされたファイルを返しませんでした! その理由は、IDE が 1 つの TIFF ファイルtray.tiff ( tray.pngtray@2x.pngを結合) を作成したため... ofType:@"tiff"]です。

于 2013-03-01T10:44:41.757 に答える
2

私の問題と解決策は、Dmitriy Isaev のものと非常によく似ています。xib ファイルのパスを取得しようとしました。(Swift では) pathForResource("myfile", ofType: "xib") と pathForResource("myfile.xib", ofType: nil) の両方の呼び出しが失敗します。

解決策は、代わりに拡張子「nib」を使用することです。

pathForResource("myfile", ofType: "nib")
于 2015-05-10T07:27:47.327 に答える
2

今日、コマンド ライン プロジェクトでこの問題が発生しました。

幸いなことに、解決策は簡単です。「Build Phases」に移動し、「+」をクリックして、新しい「Copy Files」フェーズを追加するだけです。宛先として「リソース」を選択し、使用するファイルを追加します。

今でも使用でき[NSBundle mainBundle]、動作するはずです。

于 2016-05-16T15:37:17.747 に答える
0

ファイル名は、iPad では大文字と小文字が区別されます。小文字を使用する必要があります。

于 2011-05-08T13:42:57.577 に答える
-1

リソースのファイル名のスペルが正しいことを確認してください。私はそれを難し​​い方法で学びました。:)

于 2011-08-17T11:07:08.140 に答える