22

XCodeでプロジェクトにドラッグした簡単なイントロアニメーションビデオファイルを再生しようとしているので、mainBundleから再生できるはずですよね?

このコードで:

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

このエラーメッセージが表示されます: *キャッチされなかった例外のためにアプリを終了します'NSInvalidArgumentException'、理由:'* -[NSURL initFileURLWithPath:]:nil string parameter'

どんな助けでも素晴らしいでしょう!

4

7 に答える 7

63

これは、コードがintrovideo.mp4ファイルを見つけられないことを意味します。そのファイルがバンドルに正常に追加されていることを確認してください。プロジェクトの設定をチェックインできます:バンドルリソースのコピー。 ここに画像の説明を入力してください

于 2012-11-15T16:06:48.967 に答える
4

コードが正しくありません。それに応じて以下に変更してください。それでも、ビデオをバンドルリソースにコピーします。

NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
                                     pathForResource:@"MacBook Pro with Retina Display" ofType:@"m4v"]];
MPMoviePlayerViewController *playercontroller = [[MPMoviePlayerViewController alloc]
                                                 initWithContentURL:url];
[self presentMoviePlayerViewControllerAnimated:playercontroller];
playercontroller.moviePlayer.movieSourceType = MPMovieSourceTypeFile;
[playercontroller.moviePlayer play];
[playercontroller release];
playercontroller = nil;
NSLog(@"Video is Playing");
于 2013-03-28T21:40:31.137 に答える
3

pathForResource:ofType:はnilを返すようです。それを確認します

  1. このファイルは実際に「リソースのコピー」ビルドフェーズに追加されます。
  2. ファイル名を間違えなかった-デバイス上のパスでは大文字と小文字が区別されます。
于 2012-11-15T16:09:49.707 に答える
3

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

あなたが言ったように you getting this error message: * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '* -[NSURL initFileURLWithPath:]: nil string parameter

問題がresourcePathにあることを示しているだけで、ResourceBundleにそのようなファイルが存在しないことを意味します。そのためパスがpathForResource返されnilます。

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

次に、同様に投稿されたコードで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];

私はそれがあなたにとって完全な価値があるかもしれないことを願っています。

ありがとう

于 2012-11-15T16:22:40.537 に答える
3

Xcode 9

これが更新された画像です。

[ビルドフェーズ]>[バンドルリソースのコピー]に移動し、ファイルがそこにあるかどうかを確認します。そうでない場合は、「+」ボタンを押して追加できます。

ここに画像の説明を入力してください

于 2017-11-21T04:33:08.947 に答える
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];
于 2012-11-15T16:08:31.493 に答える
1

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

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

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

...しかし、これ機能しました:

SKAction.playSoundFileNamed("Sounds/crash.caf", waitForCompletion: false)
于 2015-06-01T20:44:26.603 に答える