8

これが機能しない理由を理解するのに苦労しています:/プロジェクトを実行するたびに、アプリがクラッシュして「NSInvalidArgumentException」がスローされます。理由:「* -[NSURL initFileURLWithPath:]:nil stringparameter」

私はチュートリアルに従いました(私はこれにかなり慣れていません)、そしてそれは彼のために働きました、そしてコードはまったく同じです..誰かが何が起こっているのか説明できますか?

.hファイル

#import <UIKit/UIKit.h>
#import <MediaPlayer/MediaPlayer.h>
#import <QuartzCore/QuartzCore.h>

@interface FirstViewController : UIViewController {   
    MPMoviePlayerViewController *playerController;
}
-(IBAction)playVideo;
@end

.mファイル

#import "FirstViewController.h"

@interface FirstViewController ()

@end

@implementation FirstViewController

{
    MPMoviePlayerController *mpc;

}



- (IBAction)playButton:(id)sender {

    NSString *stringPath = [[NSBundle mainBundle]pathForResource:@"intro" ofType:@"MP4"];
    NSURL *url = [NSURL fileURLWithPath:stringPath];

    if(url != nil){

    mpc = [[MPMoviePlayerController alloc]initWithContentURL:url];

    [mpc setMovieSourceType:MPMovieSourceTypeFile];

    [[self view]addSubview:mpc.view];

    [mpc setFullscreen:YES];

    [mpc play];

    }
    else{
        NSLog(@"URL not found");

    }
}
@end
4

6 に答える 6

34

すべての中で唯一重要な部分は次のとおりです。

NSString *stringPath = [[NSBundle mainBundle] pathForResource:@"intro" ofType:@"MP4"];
NSURL *url = [NSURL fileURLWithPath:stringPath];

2行目で例外が発生していると思います。stringPathこれは、ファイルintro.MP4が実際にアプリ バンドルに含まれていない場合に発生する、nil であることを意味します。

それを確認します:

  • ソースコードのコピーにファイルが存在する

  • Xcode プロジェクトにはそのファイルへの参照があります (赤の場合は、ファイルが実際には存在しないことを意味します)

  • Xcode のターゲットで、「ビルド フェーズ」を見て、「バンドル リソースのコピー」ビルド フェーズを明らかにします。そのファイルが存在するはずです。そうでない場合は、+ ボタンを押して選択します。

于 2013-01-06T04:08:40.943 に答える
6

カートの答えは、特に私にとってはうまくいきました

「Xcode のターゲットで、[ビルド フェーズ] を見て、[バンドル リソースのコピー] ビルド フェーズを明らかにします。そのファイルが存在するはずです。存在しない場合は、+ ボタンを押して選択します。」

ムービー ファイルがありませんでした。機能していたのに停止しただけなので、以前はそこにあったに違いありません。

Kurt の投稿にコメントしたかったのですが、方法がわかりませんでした。私は「賛成票」を投じました。

于 2013-02-08T04:35:08.650 に答える
0

動画が長すぎます。このコードを使用すると、制限は 30 秒になります。あなたの最善の策は、URLからストリーミングすることです。30 秒より短いビデオを再生してみてください。問題なく動作します。

于 2014-10-20T04:33:19.313 に答える
0

さらに、この回答https://stackoverflow.com/a/14179186/3213411に記載されている内容に加えて、参照しているファイルがビルド ターゲットのメンバーであることも確認する必要があります。これは、File Inspector で指定できます。この回答は、https://stackoverflow.com/a/5300901/3213411

于 2014-01-20T00:49:22.293 に答える
0

iOS 9.2、Xcode 7.2、ARC 対応

私は最近、この問題に遭遇しました。元の貢献者が提案していることを確実に実行してください。私にとっては、問題だったのはファイルの実際の名前でした。以下を参照してください...

NSString *pathForPuzzlePieceHitSound = [[NSBundle mainBundle] pathForResource:@"puzzle_piece_hit" ofType:@"m4a"];
NSURL *urlForPuzzlePieceHitSound = [NSURL fileURLWithPath:pathForPuzzlePieceHitSound];

AudioServicesCreateSystemSoundID((__bridge CFURLRef)urlForPuzzlePieceHitSound, &idForPuzzlePieceHitSound);

ファイル名:

@"puzzle_piece_hit"

この特定の方法を使用したファイルの命名には違法な文字が含まれています。それを処理して問題を回避できると思いますが、ファイルの名前を変更する方が簡単です。

名前を変更した後:

@"puzzlePieceHit"

すべてがうまくいきました。

これが誰かを助けたことを願っています! 乾杯。

于 2016-01-13T00:00:00.390 に答える