2010-01-21 4 views
7

Avoir un problème pour obtenir l'URL d'une ressource pour une raison quelconque: Ce code est en viewDidLoad, et il a travaillé dans d'autres applications, mais pas ici pour une raison:retourne URLWithString nil pour le chemin de ressources - 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); 

LOG SORTIE:

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

URL AUDIO: 0

Erreur Erreur Domaine = NSOSStatusErrorDomain Code = -50 "L'opération n'a pas pu aboutir. (Erreur OSStatus -50.) »

Répondre

22

Votre chaîne n'a pas le protocole, il est donc un url non valide. Essayez ceci ...

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

désolé, j'ai abrégé l'entrée du journal, mais la chaîne est un chemin valide et l'utilisation du chemin élargi ne fait pas de différence – Adam

+1

ah désolé encore, j'aurais dû lire ceci plus attentivement. Passer à fileURLWithPath a résolu le problème. Merci! – Adam

4

vous passez audioURL dans votre méthode NSLog comme %d donc pourquoi vous obtenez 0. Si vous passez comme un objet avec %@ vous obtiendrez NULL.

Essayez de passage dans le audioplayer comme ça et sauter la chaîne.

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

mon appel d'origine était [[AVAudioPlayer alloc]] initWithContentsOfURL: [NSURL URLWithString: [[NSBundle mainBundle] pathForResource: @ "son" deType: @ "wav"]] erreur: nil]; mais j'avais toujours le même problème; Je l'ai juste divisé pour faciliter le débogage – Adam

6

Il suffit de changer une ligne à ceci:

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

Vous ne lisez pas les réponses avec suffisamment d'attention - vous utilisez URLWithString, lorsque vous devez utiliser fileURLWithPath. Vous ne pouvez pas passer un fichier: // chemin vers URLWithString. Je pense que vous avez également besoin de préfixer le fichier: // au début de la chaîne car vous avez seulement un chemin (qui, comme indiqué, n'a pas de protocole).

Questions connexes