При выборе строки следующий код устанавливает набор AVAudioPlayer
для воспроизведения в определенную дату (в этом случае 50 игроков играют в интервале 1 секунду).
Поскольку я хочу, чтобы весь процесс перезагрузился при касании снова, мне нужно разбить установку в цикле for, так как для настройки игроков требуется несколько секунд.
Кроме того, каждый игрок удаляется после окончания воспроизведения с использованием метода делегата audioDidFinishPlaying
AVAudioPlayerDelegate
. Я не включал это в код, так как он не имеет отношения к вопросу.
Я попытался использовать флаг внутри цикла for, чтобы проверить, разрешена ли настройка, но это не работает.
var players: [AVAudioPlayer] = []
var loadError: NSError?
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
// Removes the players that have been setup already.
players.removeAll()
// The for loop from the previous row selection should be stopped here.
for i in 0..<50 {
do {
let player = try AVAudioPlayer(contentsOfURL: soundUrls[i])
players += [player]
// The process of setting these up takes a few seconds, I need to break it.
print("Firing timer")
player.playAtTime(player.deviceCurrentTime + NSTimeInterval(i))
} catch let error as NSError {
loadError = error
}
}
}
Случается, что настройка, инициированная предыдущим выбором строки, будет продолжаться до тех пор, пока она не будет завершена, и только тогда начнется цикл new for. Мне нужно разбить его раньше.
Я не могу понять, как это решить. Возможно, удалив процессы из основного потока (How?)? Любая помощь очень ценится!