6

問題 : [NSBundle mainBundle] pathForResource が null (0x0) を返す

このトピックに関する多くの投稿を読みましたが、ここに私が見つけたものがあります:

  1. パスを取得しようとしているファイルがプロジェクト内にあることを確認してください。確認するには、ファイルのプロジェクト ファイル リストを探し、そこにない場合はドラッグ アンド ドロップします。

  2. 読み込もうとしているファイルがアプリにコピーされていることを確認します。これを行うには、プロジェクト ファイルの下のプロジェクトをクリックします (プロジェクト名が含まれる青いバー -> ターゲットをクリックします -> [ビルド フェーズ] をクリックします -> [バンドル リソースのコピー] をクリックして展開し、ファイルがその中にあることを確認します)。そうでない場合は、プラスをクリックして追加します。

  3. 大文字と小文字が完全に一致していることを確認してください。(別名 - シミュレーターは動作します/アプリは問題ありません) 大文字と小文字が正確に一致することを確認してください。そうでない場合は何も返されません。これを修正するには、プロジェクトで名前を変更するか、ソースで正しい大文字と小文字を使用してください。

  4. プロジェクトにメディア フレームワークがない可能性があります。これを修正するには、プロジェクト メニューをクリックします -> ターゲットをクリックします -> [バイナリをライブラリにリンク] をクリックして展開します。MediaPlayer.framework を選択して、コードをビルドします。

  5. 他のすべてが失敗した場合は、プロジェクトをクリーンアップして、もう一度やり直してください。

これはすべてチェック/修正されていますが、機能していません。これで問題なく動作していたので、アプリで表示しているビデオを変更しました。ファイルを変更したため、動作しなくなりました。

NSString *path = [[NSBundle mainBundle] pathForResource:@"multiplying" ofType:@"m4v"];

Q: なぜ null なのですか? ファイルは大文字と小文字が一致し、正しく入力されており、約 10 MB です。(ファイルが大きすぎますか?) シミュレーターで正常に動作し、エラーなしで、この行より上の行である画像へのパスを取得できます。

4

1 に答える 1

4

シミュレーターで動作していて、デバイスでは動作していないとおっしゃいますか? 最初の起動時にファイルをアプリケーション サンドボックス フォルダーの 1 つにコピーし、次のようにアクセスしてみてください。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *pathForTheFile= [documentsDirectory stringByAppendingPathComponent:     @"multiplying.m4v"];
于 2011-08-03T20:04:21.790 に答える