由于某种原因在获取资源的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
音频网址:0
错误错误域= NSOSStatusErrorDomain代码= -50“无法完成操作。(OSStatus错误-50。)”
答案 0 :(得分:22)
您的字符串没有协议,因此它是无效的url。试试这个......
NSString* expandedPath = [audioString stringByExpandingTildeInPath];
NSURL* audioUrl = [NSURL fileURLWithPath:expandedPath];
答案 1 :(得分:6)
只需更改一行:
NSURL* audioURL = [NSURL fileURLWithPath:audioString];
答案 2 :(得分:4)
您将audioURL
方法中的NSLog
作为%d
传递,因此为什么会得到0.如果您将其作为%@
的对象传递,则会获得NULL
{1}}。
尝试像这样传入audioplayer并跳过字符串。
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"wav"]];
答案 3 :(得分:2)
你没有仔细阅读回复 - 当你应该使用fileURLWithPath时,你正在使用URLWithString。您无法将file://路径传递给URLWithString。我认为你还需要在字符串的前面添加file://,因为你只有一个路径(指出它没有协议)。