2010-01-21 9 views
7

mając problemu z dostaniem URL do zasobu z jakiegoś powodu: Ten kod jest w viewDidLoad, i to działało w innych aplikacjach, ale nie tutaj z jakiegoś powodu:URLWithString zwraca nil na ścieżce zasobów - 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 WYJŚCIE:

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

AUDIO URL: 0

Błąd Error Domena = NSOSStatusErrorDomain Code = -50 "Operacja nie mogła zostać zakończona. (Błąd OSStatus -50).”

Odpowiedz

22

ciąg ma protokół, więc jest nieprawidłowy url. Spróbuj tego ...

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

zmartwiony, i skracałem wpis dziennika, ale ciąg jest poprawną ścieżką i używanie rozszerzonej ścieżki nie robi różnicy – Adam

+1

ah zmartwiony znowu, powinienem był przeczytać to ostrożniej. Zmiana na plikURLWithPath rozwiązała problem. Dzięki! – Adam

4

Ty przechodząc audioURL w swojej metodzie NSLog jak %d więc dlaczego masz 0. Jeśli przekazać go jako obiekt z %@ dostaniesz NULL.

Spróbuj mijania do odtwarzacze audio jak i pominąć ten ciąg.

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

moje pierwotne połączenie było [[AVAudioPlayer alloc] initWithContentsOfURL: [NSURL URLWithString: [[NSBundle mainBundle] pathForResource: @ "sound" ofType: @ "wav"]] error: nil]; ale wciąż miałem ten sam problem; Właśnie podzieliłem go dla łatwiejszego debugowania – Adam

6

Wystarczy zmienić jedną linię do tego:

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

Nie czytasz odpowiedzi na tyle ostrożnie - używasz URLWithString, kiedy należy użyć fileURLWithPath. Nie można przekazać pliku: // ścieżka do URLWithString. Myślę, że powinieneś także przedłożyć ciąg: // z przodu łańcucha, ponieważ masz tylko ścieżkę (co, jak wskazano, nie ma protokołu).

Powiązane problemy