2012-11-15 13 views
21

私はXCodeでプロジェクトにドラッグしたので、私のmainBundleから再生できるはずの簡単なイントロ動画ファイルを再生しようとしていますか? *キャッチされない例外により 'NSInvalidArgumentException'、理由にアプリを終了:: ' - ゼロの文字列パラメータ[NSURL initFileURLWithPath::] *'mainBundleからMP4ビデオファイルを再生することができません

NSURL *urlString = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"introvideo" ofType:@"mp4"]]; 
MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:urlString]; 
[player play]; 

は、私は、このエラーメッセージが表示されます。このコードで

助けがあれば助かります。

+0

まず第一に、私の問題はintrovideo.mp4ファイルがメインバンドル内に存在しないということでした。もう1つは、私のプレーヤーをグローバルにする必要がありました。これでビデオをうまく再生できました。すべての提案、みんなありがとう! – PinkFloydRocks

答えて

57

これは、あなたのコードがあなたのintrovideo.mp4ファイルを見つけることができないことを意味します。そのファイルをバンドルに追加してください。プロジェクトの設定:バンドルリソースのコピーをチェックインすることができます。 enter image description here

+0

あなたの答えをありがとう - どこでバンドルリソースを見つけるのですか?それはチェックボックスですか?これは過去に私にとっては一度も問題ではなかったので、突然現れたのはちょっと変です。 – PinkFloydRocks

+0

ありがとうございます - バンドルにビデオを手動で追加するとクラッシュが修正されました! – PinkFloydRocks

+0

ようこそ。 – sunkehappy

2
NSURL *url = [NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"video" ofType:@"mov" inDirectory:@""]]; 

MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:url]; 
[[player view] setFrame:[self.view bounds]]; // Frame must match parent view 
[self.view addSubview:[player view]]; 
[player play]; 
[player release]; 
+0

リソースはバンドルにコピーされていないので、ファイルを手動で追加した後にクラッシュが消えました。しかし、コードを使ってファイルを再生しても、ビデオは表示されません。これはコントローラーのないすべての黒のMPMoviePlayerControllerを表示します。 – PinkFloydRocks

+0

使用しているiOSのバージョンを知っていますか? – rehan

3

それはpathForResourceようだ:ofType:戻りはnil。これを確認してください

  1. このファイルは確かに "コピーリソース"ビルドフェーズに追加されています。
  2. あなたは、デバイス上のファイルパスの名前を誤って入力していないので、大文字と小文字が区別されます。
3

あなたのアプリケーションのリソースバンドルでそのビデオを利用できるかどうかを確認する必要があります。

前述のとおり you getting this error message: * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '* -[NSURL initFileURLWithPath:]: nil string parameterです。

これは単に問題がresourcePathにあることを示しています。つまり、Resource Bundleにそのようなファイルが存在しないことを示しています。なぜそのpathForResourcenilパスを返します。

このビデオファイルを再度配置し、そのファイルがリソースバンドルに存在することを確認する必要があります。

次にコードをAHeadにしてRehanとしてください。

NSURL *url = [NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"video" ofType:@"mov" inDirectory:@""]]; 

    MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:url]; 
    [[player view] setFrame:[self.view bounds]]; // Frame must match parent view 
    [self.view addSubview:[player view]]; 
    [player play]; 
    [player release]; 

お待ちしております。

ありがとうございました

4

コードが正しくありません。次のように変更してください。ビデオをバンドルリソースにコピーします。

1

"Sounds"ディレクトリ全体をプロジェクトに入れ、それを「バンドルリソースのコピー」セクションに追加しました。それは正常に動作していたが、それからクラッシュし始めた。

この修正は、ファイル名の前にディレクトリ名を付加することでした。例えば、この仕事しませんでした:

SKAction.playSoundFileNamed("crash.caf", waitForCompletion: false) 

を...

SKAction.playSoundFileNamed("Sounds/crash.caf", waitForCompletion: false) 
2

Xcodeの9

ここ

更新されたイメージは、次のとおりですが、これ仕事をしました。

ビルドフェーズ>バンドルリソースをコピーし、ファイルがあるかどうかを確認してください。表示されていない場合は、「+」ボタンを押して追加できます。

enter image description here

関連する問題