2013-04-15 3 views
0

Когда я переключаю виды, музыка продолжает воспроизводить фон, что хорошо с моим приложением. Но когда пользователь возвращается к первоначальному виду, музыка снова начинается поверх оригинала, поэтому пользователь слышит двойную музыку. У меня уже есть код, чтобы проверить, воспроизводится ли звук, но он не работает. :(AVMusic воспроизводит двойной при переключении просмотров

Любые мысли?

if (audioPlayer.playing == 0) { 
    NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/CheeZeeLab.mp3", [[NSBundle mainBundle] resourcePath]]]; 

    NSError *error; 
    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; 
    audioPlayer.numberOfLoops = 0; 
    audioPlayer.volume = 1; 
    [audioPlayer prepareToPlay]; 



    [audioPlayer stop]; 
    if (audioPlayer == nil) 
     NSLog(@"werkt niet"); 
    else 
     [audioPlayer play]; } 
else{ 

    } 
+0

как вы инициализируете 'audioPlayer' в первую очередь? – KDaker

+0

С modal segue –

ответ

0

Держу пари, ваша проблема в том, как вы переход обратно в исходный вид.

Если вы нажимаете (или делает переход от ребенка обратно родитель ... то есть круговое SEGUE), вы создаете новый экземпляр контроллера родительского вида.

и создание нового экземпляра начинает свежую версию аудио-плеер играет этот звук.

Вам нужно правильно открыть представление, чтобы вернуться к предыдущему контроллеру представления.

+0

У моего проекта есть раскадровки, а segue - модальный. Каков наилучший способ правильно отобразить представление? –

+0

[Этот связанный вопрос] (http://stackoverflow.com/questions/9732499/how-to-dismiss-a-modal-that-was-presented-in-a-uistoryboard-with-a-modal-segue) может есть ответ для вас. –

+0

Этот маленький кусок кода работал для меня: [self rejectModalViewControllerAnimated: YES] –

0

В зависимости от того, как вы настроили AVAudioPlayer, с помощью ручного сеттера и геттера, с свойством или даже в конструкторе. Вы сталкиваетесь с некоторыми проблемами.

Когда вы инициализируете ViewController, вы назначаете AVAudioPlayer, и если он продолжает играть, он не освобождается и все еще сохраняется. И ViewController не будет освобожден либо до тех пор, пока количество остатков каждого имущества не будет 0.

Возвращаясь к главному виду и снова попытавшись настроить тот же ViewController, я предполагаю, что вы не пытаетесь нажать тот же экземпляр в стек. Но, скорее, сделать новый экземпляр и подтолкнуть его к стеку? И это также делает AVAudioPlayer.

Это немного догадки, поскольку вы не можете увидеть весь код. Но если это так, я думаю, вы могли бы улучшить ситуацию. Убедитесь, что ViewController правильно освобожден и освободил все его свойства, прежде чем создавать новый экземпляр для нажатия в стек.

Смежные вопросы