尽管fileWithUrlPath的编码空间,NSURL路径仍未按预期运行:

时间:2011-06-29 14:02:24

标签: iphone avaudioplayer nsurl

我正在为玩具项目实现一个简单的按钮声音界面。有多个按钮,每个按钮分配有单独的声音。我在fooViewController中完成了这一切。{h,m}使用每个UIButton的'tag'属性,如下所示:

B0.tag = 0;
B1.tag = 1;
...

我还有一个声音文件数组,我在一个字符串数组中保存,填充如下:

sounds[0] = [[NSBundle mainBundle] pathForResource:@"foo" ofType:@"caf"];
sounds[1] = [[NSBundle mainBundle] pathForResource:@"bar" ofType:@"caf"];
...

现在,当触发Touch Up Inside事件按钮时,会触发以下方法:

-(IBAction)playSoundClip:(id)sender {

    if(sounds[[sender tag]] != nil) {
        NSError *error;        
        NSString *temp = [sounds[[sender tag]]   stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        AVAudioPlayer *av = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:temp] error:&error];

        [av play]
    }
}

我总是收到EXC_BAD_ACCESS异常。当我打印出字符串时,它们是机智的,并且可以预期......一些空格,我认为它将由上面的字符串编码来处理。

2 个答案:

答案 0 :(得分:0)

您正在使用自动释放的对象填充C数组。由于您没有获得对象的所有权,因此它们将在分配后很快发布。

我的建议是使用NSArray实例来保存您的路径。添加路径时,它会自动保留它们。

答案 1 :(得分:-1)

您需要分配NSError *错误:

NSError * error = [[NSError alloc] init];