2010-01-21 8 views
7

tiene problemas para obtener la URL de un recurso por alguna razón: Este es el código de viewDidLoad, y ha funcionado en otras aplicaciones, pero no aquí por alguna razón:vuelve URLWithString nil de ruta del recurso - iPhone

NSString* audioString = [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"wav"]; 
NSLog(@"AUDIO STRING: %@" , audioString); 

NSURL* audioURL = [NSURL URLWithString:audioString]; 
NSLog(@"AUDIO URL: %d" , audioURL); 

NSError* playererror; 
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioURL error:&playererror]; 
[audioPlayer prepareToPlay];  

NSLog(@"Error %@", playererror); 

REGISTRO DE SALIDA:

AUDIO CADENA: /var/mobile/Applications/D9FA0569-45FF-4287-8448-7EA21E92EADC/SoundApp.app/sound.wav

AUDIO URL: 0

Error de error Dominio = NSOSStatusErrorDomain Code = -50 "La operación no se pudo completar. (Error OSStatus -50.)"

Respuesta

22

Su cadena tiene ningún protocolo, por lo que es un inválido url. Prueba esto ...

NSString* expandedPath = [audioString stringByExpandingTildeInPath]; 
NSURL* audioUrl = [NSURL fileURLWithPath:expandedPath]; 
+0

lo siento, abrevé la entrada del registro, pero la cadena es una ruta válida y el uso de la ruta expandida no hace la diferencia – Adam

+1

lo siento de nuevo, debería haber leído esto con más cuidado. Cambiar a fileURLWithPath solucionó el problema. ¡Gracias! – Adam

4

Usted está pasando audioURL en su método NSLog como %d de ahí se obtiene 0. Si se le pasa como un objeto con %@ obtendrá NULL. Paso

Try en el audioplayer como este y saltar la cuerda.

NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"wav"]]; 
+0

mi llamada original era [[AVAudioPlayer alloc] initWithContentsOfURL: [NSURL URLWithString: [[NSBundle mainBundle] pathForResource: @ "sound" ofType: @ "wav"]] error: nil]; pero todavía tenía el mismo problema; Simplemente lo dividí para facilitar la depuración – Adam

6

Sólo cambia una línea a la siguiente:

NSURL* audioURL = [NSURL fileURLWithPath:audioString]; 
2

Usted no está leyendo las respuestas con suficiente cuidado - está utilizando URLWithString, cuándo se debe utilizar fileURLWithPath. No puede pasar un archivo: // ruta a URLWithString. Creo que también es necesario anteponer file: // en la parte frontal de la cadena, ya que solo tiene una ruta (que, como se señaló, no tiene protocolo).

Cuestiones relacionadas