При остановке проигрывателя высказывания определенно удаляются из очереди.
Однако в вашей функции moveBackward
вы вставляете еще один AVSpeechUterrance
в playQueue[0]
, полный массив которого представляет очередь проигрывателя.
Предполагая, что остановки происходят с currentIndex = 2
, следующие снимки подтверждают, что один и тот же объект дважды вводится в очередь :
К сожалению, как указывает система, AVSpeechUtterance не должен ставиться в очередь дважды , и это именно то, что вы здесь делаете:объекты в индексах playQueue 0 и 2 имеют один и тот же адрес памяти .
Последний цикл после вставки нового объекта в индекс 0 просит синтезатор речи поместить все высказывания в свою новую очередь... и два из них одинаковы.
Вместо копирования playedQueue
в backedQueue
(оба содержат одинаковые адреса памяти для своих объектов) ИЛИ добавляя одинаковыевысказывание в обоих массивах, я предлагаю создать различные экземпляры высказываний , которые будут выглядеть следующим образом:
for i in 1...5 {
let stringNb = "number " + String(i) + " of the speech synthesizer."
let utterance = AVSpeechUtterance(string: stringNb)
playQueue.append(utterance)
let utteranceBis = AVSpeechUtterance(string: stringNb)
backedQueue.append(utteranceBis)
}
Следуя этому совету, вы не должны встретить ошибку AVSpeechUtteranceне должен ставиться в очередь дважды .