audioPlayerDidFinishPlaying: успешно: не вызывается - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь segue перейти к следующему просмотру в конце короткого музыкального клипа.Никаких ошибок нет, но когда я его запускаю, сообщение NSLog никогда не появляется, а переход никогда не происходит.Почему delegate не знает, когда заканчивается звук?

Это файл .h:

@interface RecordingViewController : UIViewController 
<AVAudioPlayerDelegate> {

    AVAudioPlayer *player;
    NSArray *recordingsArray;
    int randomizedArtist;

}

Вот код из viewDidLoad:

// set self as AVAudioPlayerDelegate
[player setDelegate:self];

// prep Audio Player
@try {
    NSError *myError;

    path = [[NSBundle mainBundle] pathForResource:recordingsArray[randomizedArtist] ofType:@"mp3"];
    player = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path]  error:&myError];

    if (!player) {
        NSLog(@"viewDidLoad:error %@", [myError localizedDescription]);
        NSLog(@"viewDidLoad:failure reason %@", [myError localizedFailureReason]);
        NSLog(@"viewDidLoad:recovery option %@", [myError localizedRecoveryOptions]);
        NSLog(@"viewDidLoad:recovery suggestions %@", [myError localizedRecoverySuggestion]);
    }
}
@catch (NSException *exception){

    NSLog(@"Exception %@ occurred", exception.name);
    NSLog(@"Exception reason %@", exception.reason);
    NSLog(@"Exception userInfo %@", exception.userInfo);

    // make pop up alert

}
@finally{

    NSLog(@"Finally on reading URL file called");

}

[player prepareToPlay];

Вот где я призываю игрока начать игру:

- (IBAction)playButton:(id)sender {
    [player play];
}

А вот где я вызываю игру:

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag {
    NSLog(@"Player did finish playing");
    [self performSegueWithIdentifier:@"quizVCSegue" sender:self];
}

1 Ответ

0 голосов
/ 06 декабря 2018

Проверьте этот код, если он работает

@interface ViewController()..,AVAudioPlayerDelegate

Выделите AVPlayer

 NSError *error;
_audioPlayerRecord = [[AVAudioPlayer alloc] initWithContentsOfURL:soundUrl error:&error];
if (error)
{
    NSLog(@"Error in audioPlayer: %@",
          [error localizedDescription]);
} else {
    _audioPlayerRecord.delegate = self;
    [_audioPlayerRecord prepareToPlay];
}

и #import <AVFoundation/AVFoundation.h>

...