2010-01-21 2 views
7

Имея проблемы, получая URL для ресурса по какой-то причине: Этот код находится в viewDidLoad, и он работал в других приложениях, но здесь не по какой-то причине:URLWithString возвращает 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 OUTPUT:

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

URL

AUDIO: 0

Ошибка Error Domain = NSOSStatusErrorDomain Code = -50 «Операция не может быть завершена. (OSStatus ошибка -50.)»

ответ

22

Ваша строка не имеет протокол, так что это недопустимое url. Попробуйте ...

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

извините, я сократил запись в журнале, но строка является допустимым путем и использование расширенного пути не имеет значения. – Adam

+1

ah sorry again, я должен был прочитать это более тщательно. Переход на файлURLWithPath устранил проблему. Благодаря! – Adam

4

Вы проходя audioURL в методе NSLog, как %d следовательно, почему вы получите 0. Если передать его как объект с %@ вы получите NULL.

Try прохождение в аудиоплеера, как это и пропустить строку.

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

мой оригинальный звонок был [[AVAudioPlayer alloc] initWithContentsOfURL: [NSURL URLWithString: но у меня все еще была та же проблема; Я просто разделил его на более легкую отладку. – Adam

6

Просто измените одну строку следующим образом:

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

Вы не читаете ответы достаточно тщательно - вы используете URLWithString, когда вы должны использовать fileURLWithPath. Вы не можете передать файл: // путь к URLWithString. Я думаю, вам также необходимо добавить файл: // в начале строки, поскольку у вас есть только путь (который, как указано, не имеет протокола).

Смежные вопросы