2009-12-07 86 views
9

最近我遇到了,我找不到任何地方在互联网上讨论的一个问题 - 我是初始化AVAudioPlayer播放音频文件,并得到以下错误:AVAudioPlayer初始化:错误代码-50

Error Domain=NSOSStatusErrorDomain Code=-50 "Operation could not be completed. (OSStatus error -50.) 

事实证明,我创建了一个错误,将我的NSURL发送给音频播放器init方法,导致NSURL对象为空。愚蠢的错误,调试时很容易找到,但我想我会在这里列出来,以防别人做同样的事情。

+3

对于任何人想知道为什么他们的NSURL对象为空,如果你是这样创建你的NSURL,并且你的文件名中有空格,你需要百分比编码:'NSString * path = [[ NSBundle mainBundle] pathForResource:@“file with spaces.mp3”ofType:@“”]; NSString * path = [path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURL * url = [NSURL URLWithString:path];' – Brynjar 2011-07-31 18:14:19

+0

真棒评论指出文件名中的空格问题!非常感谢! – codepushr 2014-07-04 15:46:16

+1

此错误的一个可能的来源是尝试将AVAudioSessionCategoryOptions.defaultToSpeaker选项与AVAudioSessionCategoryPlayback一起使用。这不起作用,你需要使用AVAudioSessionCategoryPlayAndRecord - 或者删除defaultToSpeaker选项。 – RenniePet 2017-03-11 15:02:35

回答

6

“OSStatus错误-50”表示paramErr,旧式Mac错误代码表示错误的参数。

1

确保您的NSURL有效,否则您将收到错误代码-50“操作无法完成”。

+0

我如何确保我的NSURL有效?路径是正确的,并在iPad上工作,但是当我在模拟器中运行它时,找不到文件... :( – jowie 2010-11-16 12:50:41

7

关于从Brynjar注释: 苹果NSURL类参考描述URLWithString指出

To create NSURL objects for file system paths, use fileURLWithPath:isDirectory: instead.

我发现,使用URLWithString文件系统路径生成由pix0r报告的错误,因此可能是错误的另一种解释代码= -50