2013-01-06 77 views
8

我很努力去理解爲什麼這不起作用:/每當我運行項目時,應用程序崩潰拋出一個'NSInvalidArgumentException',原因:'* - [NSURL initFileURLWithPath:]:零字符串參數」視頻播放失敗 - [NSURL initFileURLWithPath:]:無字符串參數

我跟着一個教程(我很新的這一點),併爲他工作和代碼是完全一樣的..誰能解釋怎麼回事上?

.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 
+0

在任何人問及Reece Darragh擁有我們正在使用的開發者賬戶之前,感謝您的幫助 –

回答

33

的一切,唯一重要的部分是:

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

我認爲唯一的例外是第二線內提出。這意味着stringPath爲零,如果文件intro.MP4實際上不在您的應用程序包中,則會發生這種情況。

檢查:

  • 的文件存在於您的源代碼的副本

  • 您的Xcode項目有該文件 (參考,如果它是紅色的,這意味着該文件ISN」 t實際存在)

  • 在您的Xcode目標中,查看「Build Phases」並顯示「Copy Bundle Resources」構建階段。該文件應該存在。如果不是,請按+按鈕並將其選中。

+0

感謝您的回覆。不幸的是,它仍然沒有啓動,我確信你推薦的所有東西。 intro.mp4現在肯定在捆綁中?我很困惑,爲什麼這不是推出 –

+1

還檢查你是否正確拼寫名稱(包括案件 - 你確定它是MP4不是MP4?)。您也可能想要在磁盤上查看您的內置應用程序,以查看該文件是否應該存在。 –

+0

我已經檢查過.app文件,並且視頻位於主文件夾中應該在哪裏?也試圖改變MP4的情況下,但這並沒有顯着差異:( –

6

Kurt的回答爲我工作特別是

「在Xcode中的目標,看‘構建階段’,揭示了‘複製包資源’建設階段。該文件應該存在。如果不是,請按+按鈕並選擇它。「

我的電影文件丟失了。它之前一定是在那裏,因爲它正在工作,然後就停止了。

我會對Kurt的帖子發表評論,但不知道如何。我做了「投票」。

0

您的視頻太長。使用此代碼,限制爲30秒。你最好的選擇是從一個網址流。嘗試播放視頻短30秒,它會正常工作。

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" 

一切工作就好了。

希望這有助於某人!乾杯。