URLWithString возвращает ноль для пути к ресурсу - iphone

По какой-то причине возникла проблема с получением URL-адреса ресурса: этот код находится в viewDidLoad, и он работал в других приложениях, но по какой-то причине не здесь:

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);

ВЫВОД ЖУРНАЛА:

АУДИОСТРОКА: /var/mobile/Applications/D9FA0569-45FF-4287-8448-7EA21E92EADC/SoundApp.app/sound.wav

АУДИО URL: 0

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


person Adam    schedule 21.01.2010    source источник


Ответы (4)


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

NSString* expandedPath = [audioString stringByExpandingTildeInPath];
NSURL* audioUrl = [NSURL fileURLWithPath:expandedPath];
person slf    schedule 21.01.2010
comment
извините, я сократил запись в журнале, но строка является допустимым путем, и использование расширенного пути не имеет значения - person Adam; 22.01.2010
comment
ах еще раз извините, мне следовало прочитать это внимательнее. Переход на fileURLWithPath устранил проблему. Спасибо! - person Adam; 22.01.2010

Просто измените одну строку на это:

    NSURL* audioURL = [NSURL fileURLWithPath:audioString];
person willc2    schedule 21.01.2010

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

Попробуйте перейти в аудиоплеер вот так и пропустите строку.

NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"wav"]];
person Convolution    schedule 21.01.2010
comment
мой исходный вызов был [[AVAudioPlayer alloc] initWithContentsOfURL: [NSURL URLWithString: [[NSBundle mainBundle] pathForResource: @sound ofType: @wav]] error: nil]; но у меня все еще была та же проблема; Я просто разделил его для облегчения отладки - person Adam; 22.01.2010

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

person Kendall Helmstetter Gelner    schedule 21.01.2010