Terminar llamado lanzando una excepción

He creado un fragmento de código para reproducir un archivo de video. Pero cuando lo construyo me sale el siguiente error:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: ' -[NSURL initFileURLWithPath:]: nil string parameter' First throw call stack: (0x1ed8022 0x11c0cd6 0x1e80a48 0x1e809b9 0xc6553b 0xc654c5 0x2be8 0x1ed9e99 0x32614e 0x3260e6 0x3ccade 0x3ccfa7 0x3cc266 0x34b3c0 0x34b5e6 0x331dc4 0x325634 0x17baef5 0x1eac195 0x1e10ff2 0x1e0f8da 0x1e0ed84 0x1e0ec9b 0x17b97d8 0x17b988a 0x323626 0x29b2 0x2925) terminar llamada lanzando una excepción

¡He intentado mucho para arreglarlo pero nada funciona! ¿No tienes una solución? Y sí, ¡he implementado el marco del reproductor multimedia!

He codificado el siguiente código:

-(IBAction)playvideo {

    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
                                         pathForResource:@"film" ofType:@"mp4"]];

    MPMoviePlayerViewController *playercontroller = [[MPMoviePlayerViewController alloc]
                                                     initWithContentURL:url];

    [self presentMoviePlayerViewControllerAnimated:playercontroller];

    playercontroller.moviePlayer.movieSourceType = MPMovieSourceTypeFile;

    [playercontroller.moviePlayer play];

    [playercontroller release];

    playercontroller = nil;

}

preguntado el 08 de septiembre de 12 a las 09:09

1 Respuestas

El problema se describe en esta línea:

Finalización de la aplicación debido a la excepción no detectada 'NSInvalidArgumentException', motivo: ' -[NSURL initFileURLWithPath:]: parámetro de cadena nula'

Lo cual te está diciendo que estás pasando un nil en un parámetro que no permite una nil.

Pasos para asegurarse de que este es el problema:

-(IBAction)playvideo {
    NSString *videoPath = [[NSBundle mainBundle] pathForResource:@"film" ofType:@"mp4"]

    if (!videoPath) {
        NSLog(@"Video path is nil. My bundle must be set up incorrectly");
        return; // return early.
    }

    NSURL *url = [NSURL fileURLWithPath:videoPath];

    MPMoviePlayerViewController *playercontroller = [[MPMoviePlayerViewController alloc]
                                                     initWithContentURL:url];

    // The rest of your implementation here. 

}

Esto al menos debería ayudarlo a localizar el problema.

Aparte, debe utilizar métodos basados ​​en URL para obtener recursos en lugar de rutas de archivos basadas en cadenas. Pero una cosa a la vez.

Respondido el 08 de Septiembre de 12 a las 10:09

¡Lo he probado y obtengo el NSLog! ¿Ahora que? - pim praat

Como dice, no tiene el archivo en su paquete donde espera que esté. ¿Estás agregando el archivo en los recursos? ¿Está en un subdirectorio? ¿Tiene exactamente el mismo nombre? - Abizerno

Obviamente, no lo es, ya que está registrando la condición en la que no puede encontrar un archivo donde espera que esté. - Abizerno

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.