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 は、パスの NSArray 内の各 NSString をレシーバーに個別に追加することによって作成された NSString オブジェクトの NSArray を返します。@"sound.caf" は NSArray ではなく NSString であるため、例外が発生します。

以下を変更します。

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

に:

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

そしてそれはうまくいくはずです。

于 2012-09-02T20:16:55.227 に答える