2010-01-21 11 views
7

एक समस्या किसी कारण के लिए एक संसाधन के लिए URL प्राप्त करने के बाद: इस कोड viewDidLoad में है, और यह अन्य अनुप्रयोगों में काम किया, लेकिन यहाँ नहीं है कुछ कारण के लिए:URLWithString रिटर्न संसाधन पथ के लिए शून्य - 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); 

लॉग आउटपुट:

ऑडियो: STRING /var/mobile/Applications/D9FA0569-45FF-4287-8448-7EA21E92EADC/SoundApp.app/sound.wav

ऑडियो यूआरएल: 0

त्रुटि त्रुटि डोमेन = NSOSStatusErrorDomain कोड = -50 "ऑपरेशन पूरा नहीं हो सका। (OSStatus त्रुटि -50।) "

उत्तर

22

आपका स्ट्रिंग कोई प्रोटोकॉल है, इसलिए यह गलत url है। इस प्रयास करें ...

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

क्षमा के लिए विभाजित करता हूं, मैंने लॉग एंट्री को संक्षेप में लिखा है, लेकिन स्ट्रिंग एक वैध पथ है और विस्तारित पथ का उपयोग करने से कोई फर्क नहीं पड़ता – Adam

+1

आह क्षमा करें, मुझे इसे और अधिक सावधानी से पढ़ना चाहिए था। FileURLWithPath में बदलकर समस्या ठीक हुई। धन्यवाद! – Adam

4

आप %d के रूप में अपने NSLog विधि में audioURL गुजर रहे हैं इसलिए तुम क्यों 0. मिल आप %@ के साथ एक वस्तु आप NULL मिल जाएगा के रूप में यह पार कर लेते हैं।

कोशिश गुजर इस तरह audioplayer में और स्ट्रिंग को छोड़ दें।

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

मेरा मूल कॉल था [[AVAudioPlayer alloc] initWithContentsOfURL: [NSURL URLWithString: [[NSBundle mainBundle] pathForResource: @ "sound" ofype: @ "wav"]] त्रुटि: शून्य]; लेकिन मुझे अभी भी एक ही समस्या थी; मैं बस इसे आसान डीबगिंग – Adam

6

बस इस के लिए एक लाइन बदलने के लिए:

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

आप ध्यान से अपर्याप्त प्रतिक्रियाएं नहीं पढ़ रहे हैं - आप URLWithString उपयोग कर रहे हैं, जब आप fileURLWithPath उपयोग करना चाहिए। आप फ़ाइल को पास नहीं कर सकते: // URLWithString के लिए पथ। मुझे लगता है कि आपको स्ट्रिंग के सामने फ़ाइल: // को प्रीपेड करने की भी आवश्यकता है क्योंकि आपके पास केवल एक पथ है (जैसा कि इंगित किया गया है कि कोई प्रोटोकॉल नहीं है)।

संबंधित मुद्दे