URLWithString为资源路径返回nil - iphone

时间:2010-01-21 21:08:28

标签: iphone resources nsurl

由于某种原因在获取资源的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。)”

4 个答案:

答案 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://,因为你只有一个路径(指出它没有协议)。