xcode object c – когда я вызываю 2 метода – только последний вызываемый метод запускается, а первый пропускается

-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag { [self NextHeading]; // this plays an mp3 file [self NextHeadingMeaning]; // this plays an Mp3 file } 

[self NextHeadingMeaning] метод [self NextHeadingMeaning] метод NextHeading пропускается каждый раз

 -(IBAction) NextHeading{ ; NSString *Filename = [[NSString alloc]initWithFormat:@"CH%@S%@",Heading,Meaning]; Filepath = [[NSBundle mainBundle]pathForResource:Filename ofType:@"mp3"]; audio = [[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:Filepath] error:NULL]; audio.delegate = self; ; [Filename autorelease]; } -(IBAction) NextHeadingMeaning { ; NSString *Filename = [[NSString alloc] initWithFormat:@"CH%@S%@",bold**Chapter**bold, Meaning]; Filepath = [[NSBundle mainBundle]pathForResource:Filename ofType:@"mp3"]; audio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:Filepath] error:NULL]; audio.delegate = self; ; [Filename autorelease]; } 

Почему это происходит и как я могу его решить?

Пожалуйста, совет, спасибо заранее.

Вы использовали только один iVar ( audio ) в качестве проигрывателя, и когда вы отправляете сообщение NextHeading & NextHeadingMeaning , NextHeading NextHeadingMeaning audio init с файла sound_1.mp3 (потребуется несколько секунд, если файл mp3 большой), а затем на в следующий момент (ваш первый mp3-файл может не быть включен или включен, но остановлен после следующего сообщения), вы перезапустите действие init с другим mp3-файлом (sound_2.mp3) и, наконец, когда второй mp3-файл инициализирован, audio играет sound_2.mp3 . Вот почему вы считаете, что NextHeading пропущен.

Итак, чтобы решить эту проблему, вы можете использовать NSMutableArray iVar (например, audioPlayers ) и создать локальный audio для NextHeading & NextHeadingMeaning и направить его на audioPlayers .

И я думаю, что лучше предустановить звуковые файлы, если сможете. 🙂


РЕДАКТИРОВАТЬ:

Вместо play вы можете использовать метод playAtTime: вы можете отсрочить время воспроизведения второго аудиоплеера с помощью этого метода:

 [audioPlayer playAtTime:(audioPlayer.deviceCurrentTime + delay)]; 

delay в секундах ( NSTimeInterval ).

Нельзя пропускать первый вызов, помещать в него точку останова или выводить что-то с помощью NSLog (), и вы увидите. Наиболее вероятная причина в том, что первый метод не выполняет то, что вы ожидаете, и это может быть по разным причинам – например, условие или определенный тайм-аут.

Редактирование. После просмотра кода кажется, что вам не хватает некоторых базовых элементов, таких как имена переменных, область переменных и т. Д. Чтобы просто запустить ваш код, просто замените строку NSString *Filename.. из второго метода и, вероятно, это сработает. Лучшим вариантом было бы посетить « Начать разработку приложений для iOS сегодня» и следовать «дорожной карте».