首页 文章

URLWithString 为资源路径返回 nil - iphone

提问于
浏览
7

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

错误错误 Domain=NSOSStatusErrorDomain Code=-50“操作无法完成。(OSStatus 错误-50.)”

4 回答

  • 22

    你的字符串没有协议,所以它是无效的网址。试试这个...

    NSString* expandedPath = [audioString stringByExpandingTildeInPath];
    NSURL* audioUrl = [NSURL fileURLWithPath:expandedPath];
    
  • 6

    只需将一行更改为:

    NSURL* audioURL = [NSURL fileURLWithPath:audioString];
    
  • 4

    你在NSLog方法中传递audioURL%d因此为什么你得到 0.如果你把它作为一个对象%@传递你将获得NULL

    尝试像这样传入 audioplayer 并跳过字符串。

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

    您没有仔细阅读响应 - 当您应该使用 fileURLWithPath 时,您正在使用 URLWithString。您不能将 file://路径传递给 URLWithString。我认为你还需要在字符串的前面加上 file://,因为你只有一个路径(指出它没有协议)。

相关问题