0

我正在学习Objective C,并且正在学习本书中的示例。但是在某些示例中,我不断收到此错误!我完全按照步骤操作,请帮助!我已经尝试将 iOS 模拟器恢复为其默认设置,但仍然没有运气。

这是一个应用程序,您可以在其中录制声音并播放。这是代码...

- (IBAction)recordAudio:(id)sender {
    if ([self.recordButton.titleLabel.text isEqualToString:@"Record Audio"]){
        [self.audioRecorder record];
        [self.recordButton setTitle:@"Stop Recording"
                           forState:UIControlStateNormal];
    } else {
        [self.audioRecorder stop];
        [self.recordButton setTitle:@"Record Audio"
                           forState:UIControlStateNormal];

        // Load the new sound in the audioplayer for playback
        NSURL *soundFileURL = [NSURL fileURLWithPath:[NSTemporaryDirectory()
                             stringsByAppendingPaths:@"sound.caf"]];

        self.audioPlayer = [[AVAudioPlayer alloc]
                            initWithContentsOfURL:soundFileURL error:nil];
    }
}
4

1 回答 1

1

我运行了您的部分代码,这是错误消息:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '***
-[__NSCFString stringsByAppendingPaths:]: paths argument is not an array'

正如文档所说,stringsByAppendingPaths 返回一个由 NSString 对象组成的 NSArray,该对象是通过将每个 NSString 分别附加到接收器的 NSArray 路径中而制成的。@"sound.caf" 是一个 NSString,而不是一个 NSArray,它会引发异常。

更改以下内容:

    NSURL *soundFileURL = [NSURL fileURLWithPath:[NSTemporaryDirectory()
                         stringsByAppendingPaths:@"sound.caf"]];

至:

    NSURL *soundFileURL = [NSURL fileURLWithPath:[NSTemporaryDirectory()
                         stringByAppendingPathComponent:@"sound.caf"]];

它应该可以工作。

于 2012-09-02T20:16:55.227 回答