EXC_BAD_ACCESS с таймером.scheduledTimer

#ios #swift #xcode #timer #uiimageview

#iOS #swift #xcode #таймер #uiimageview

Вопрос:

Я создаю приложение, которое включает в себя изменение UIImageViews на каждую секунду / шаг с помощью 4-шагового таймера обратного отсчета. Я получаю ошибку EXC_BAD_ACCESS, когда моя программа пытается выполнить таймер:

 func startTimer(slider_Value: Float, coin: Int){
    let delay = Double(slider_Value/5)
    var i = 1
    timer = Timer.scheduledTimer(withTimeInterval: delay, repeats: true){(timer) in
        if i>4{
            timer.invalidate()
        }else{
            switch(i){
            case 1:
                self.lowerTimer.image = UIImage(named: "P1Timer1")
                self.upperTimer.image = UIImage(named: "P2Timer1")
                i = i 1
            case 2:
                self.lowerTimer.image = UIImage(named: "P1Timer2")
                self.upperTimer.image = UIImage(named: "P2Timer2")
                i = i 1
            case 3:
                self.lowerTimer.image = UIImage(named: "Timer3")
                self.upperTimer.image = UIImage(named: "Timer3")
                i = i 1
            case 4:
                self.logo.image = UIImage(named: "Timer4_Logo")
                i = i 1
            default:
                self.lowerTimer.image = UIImage(named: "Timer0")
                self.upperTimer.image = UIImage(named: "Timer0")
                self.logo.image = UIImage(named: "SwipeIsh_Logo")
                i = i 1
            }
        }
    }
  

Не совсем уверен, почему этот сбой происходит при запуске приложения. Где XCode сообщает мне, что приложение выходит из строя при выполнении таймера (я также настроил «var timer: таймер?» намного раньше в программе). У кого-нибудь есть идеи, почему?

Комментарии:

1. Какая строка выдает исключение? Вы установили точку останова при закрытии таймера и выполнили переход, чтобы посмотреть, что происходит?

2. @Paulw11 Это происходит в третьей строке внутри функции («timer = Timer.scheduledTimer …») В нем говорится, что сбой происходит в потоке 1, и я не уверен, что это значит?

3. Если вы добавляете точку останова в строку if I>4 { , останавливается ли она на этой строке? Можете ли вы затем пошагово выполнить код? Подключили ли вы выходы для просмотра изображений к раскадровке?