0

設定した文字列を NSString に読み取らせるのに問題があります。重要な場合は、再生アクションが UIButton OnTouchDown にフックされます。

- (IBAction)play {
 if (audioPlayer.playing == NO) {
    urlSong = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/k.mp3", [[NSBundle mainBundle] resourcePath]]];
     [audioPlayer release];
     audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:urlSong error:&error];
    audioPlayer.numberOfLoops = 0;
     //if i set this line to stringSong = @"k"; then comment out the next line everything works fine 
     stringSong = [[urlSong lastPathComponent] stringByDeletingPathExtension];
     label.text = stringSong;
    AVAudioSession *audiosession = [AVAudioSession sharedInstance];
    [audiosession setCategory:AVAudioSessionCategoryAmbient error:nil];

    [audioPlayer play];
    [start setTitle:@"Stop" forState:UIControlStateNormal];
}
     else
         if ([stringSong isEqualToString:@"k"]){

         label.text = @"audio stopped";
         [audioPlayer stop];
            }

}

iPhoneでコードを実行するとXcodeが返されます

EXC_BAD_ACCESS

この行で

             if ([stringSong isEqualToString:@"k"]){

これは、文字列を「k」に設定するとコードが正常に実行されるため、URL から文字列を設定しようとしたことが原因であることはわかっています。

誰かがこれの全体的なポイントを疑問に思っている場合は、このボタンが押されたときに他のすべてのオーディオを停止し、この場合は「k.mp3」であるこのボタンに割り当てられたオーディオを開始するようにオーディオ ボタンを設定しようとしています。ただし、このオーディオが既に再生されている場合は、すべてのオーディオの再生を停止するだけです。ありがとうございました。

4

1 に答える 1

1

保持していませんstringSong

この行:

stringSong = [[urlSong lastPathComponent] stringByDeletingPathExtension];

次のようにする必要があります。

stringSong = [[[urlSong lastPathComponent] stringByDeletingPathExtension] retain];

ある時点で、これをリリースする必要があります。

于 2013-03-15T03:29:18.977 に答える