URLWithString возвращает ноль для пути ресурса - iphone - PullRequest
7 голосов
/ 22 января 2010

По какой-то причине возникла проблема с получением 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);

ВЫХОД ИЗ ЖУРНАЛА:

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

АУДИО URL: 0

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

Ответы [ 4 ]

22 голосов
/ 22 января 2010

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

NSString* expandedPath = [audioString stringByExpandingTildeInPath];
NSURL* audioUrl = [NSURL fileURLWithPath:expandedPath];
6 голосов
/ 22 января 2010

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

    NSURL* audioURL = [NSURL fileURLWithPath:audioString];
4 голосов
/ 22 января 2010

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

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

NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"wav"]];
2 голосов
/ 22 января 2010

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

...