2013-01-06 6 views
8

Non riesco a capire perché questo non funziona:/Ogni volta che eseguo il progetto l'app si arresta in modo anomalo generando un 'NSInvalidArgumentException', motivo: '* - [NSURL initFileURLWithPath:]: nil parametro stringa 'La riproduzione del video non riesce - [NSURL initFileURLWithPath:]: parametro stringa nil

Ho seguito un tutorial (sono abbastanza nuovo a questo) e ha funzionato per lui e il codice è esattamente lo stesso .. Qualcuno può spiegare che cosa sta andando sopra?

file h

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

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

di file .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

Prima che qualcuno chieda a Reece Darragh è proprietario dell'account di sviluppo che stiamo utilizzando. Grazie per il tuo aiuto –

risposta

33

L'unica parte importante di tutto ciò che è:

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

presumo l'eccezione viene sollevata all'interno della seconda linea . Il che significherebbe che stringPath era nullo, il che accadrebbe se il file intro.MP4 non fosse effettivamente nel pacchetto della tua app.

Controllare che:

  • il file esiste nella vostra copia del codice sorgente

  • progetto Xcode ha un riferimento a quel file (se è rosso, significa che il file isn' t effettivamente presente)

  • Nel tuo target in Xcode, guarda "Build Phases" e rivela la fase di compilazione "Copy Bundle Resources". Quel file dovrebbe essere presente. In caso contrario, premere il pulsante + e selezionarlo.

+0

Grazie per la risposta. Sfortunatamente non si sta ancora avviando e mi sono assicurato di tutto ciò che hai raccomandato. intro.mp4 è ora definitivamente nel pacchetto? Sono molto confuso sul motivo per cui questo non viene avviato –

+1

Controlla anche di aver digitato correttamente il nome (inclusa la custodia - sei sicuro che sia MP4 non mp4?). Potresti anche voler guardare all'interno della tua app costruita, su disco, per vedere se il file è dove dovrebbe essere. –

+0

Ho controllato il file .app e il video è all'interno della cartella principale dove dovrebbe essere? Anche provato a cambiare caso sull'MP4 ma questo non ha fatto la differenza apparentemente :( –

6

risposta di Kurt ha lavorato per me in particolare il

"Nel vostro obiettivo in Xcode, guarda 'Build Fasi' e rivelano la 'copia Bundle Risorse' Costruiamo fase. Il file dovrebbe essere presente. Se non lo è, premere il pulsante + e selezionarlo. "

il mio file film era mancante. Deve essere stato lì prima perché funzionava e poi si è fermato.

Avrei fatto un commento al post di Kurt ma non sapevo come. Ho "votato".

0

Il tuo video è troppo lungo. Usando questo codice, il limite è di 30 secondi. La tua migliore scommessa è quella di trasmetterlo da un URL. Prova a riprodurre un video più breve di 30 secondi e funzionerà correttamente.

0

iOS 9.2, Xcode 7.2, ARC abilitato

Recentemente mi sono imbattuto in questo problema io stesso. Sicuramente fai ciò che i contributori originali stanno suggerendo. Per me era il vero nome del file che era il problema, vedi sotto ...

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

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

Il nome del file:

@"puzzle_piece_hit" 

contiene caratteri in esso che sono illegali per la denominazione dei file con questo metodo particolare. Immagino che tu possa trattarlo e aggirare il problema, ma è più facile rinominare il file.

Dopo ho rinominato a:

@"puzzlePieceHit" 

tutto ha funzionato bene.

Spero che questo abbia aiutato qualcuno! Saluti.

Problemi correlati