2010-01-21 11 views
7

nedense bir kaynak için bir URL almak bir sorun olması: Bu kod viewDidLoad olduğunu ve nedense diğer uygulamalarda çalıştı, ama burada değil var:URLWithString döner kaynak yolu için nil - 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 ÇIKIŞI:

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

SES URL: 0

Hata Hata Etki Alanı = NSOSStatusErrorDomain Kodu = -50 "İşlem tamamlanamadı. (OSStatus hatası -50.)"

cevap

22

Sizin dize hiçbir protokol vardır, geçersiz url yüzden. bunu deneyin ...

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

hata ayıklama için bölme, ben log giriş kısaltılmış, ancak dize geçerli bir yol ve genişletilmiş yol kullanarak bir fark daha – Adam

+1

ah yapmaz tekrar, bu daha dikkatli okumuş olmalı. FileURLWithPath değerine geçmek sorunu çözdü. Teşekkürler! – Adam

4

Eğer NULL alırsınız %@ ile bir nesne olarak geçerseniz size 0'a olsun dolayısıyla neden %d olarak NSLog yöntemde audioURL geçiyoruz.

deneyin geçen ve bunun gibi AudioPlayer içine dize atlayın.

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

orijinal görüşme [[AVAudioPlayer ayırma] initWithContentsOfURL oldu: [NSURL URLWithString: [[NSBundle mainBundle] pathForResource: @ "sound" ofType: @ "wav"]] error: nil]; ama yine de aynı problemi yaşadım; Ben sadece – Adam

6

Sadece bu bir satır değiştirin:

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

dikkatle yeterli yanıtları okumuyorsun - Eğer fileURLWithPath kullanmalısınız zaman, URLWithString kullanıyor. URLWithString'e bir dosya: // yolunu geçemezsiniz. Aynı zamanda, sadece bir yolunuz olduğu için (dize işaretli olduğu gibi) dizenin önündeki file: // 'i de eklemelisiniz.