Метод таймера Swift завершает приложение рано с ошибкой SIGABRT - PullRequest
0 голосов
/ 14 января 2020

Ниже мой код для того, чтобы таймер изменил переменную с 0 на 1, что приводит к ошибке SIGABRT, когда таймер пытается сработать:

var timerToggle = 0

    let timer = Timer.scheduledTimer(timeInterval: 5.0, target: self, selector: #selector(fireTimer), userInfo: nil, repeats: false)

    @objc func fireTimer() {
        timerToggle = 1
    }

Я знаю других, у которых была эта проблема кажется, решить эту проблему, поместив объявление таймера в функцию override func viewDidLoad(), но всякий раз, когда я это делаю, это выдает мне следующую ошибку

«Инициализация неизменяемого значения« таймер »никогда не использовалась; рассмотрите возможность замены на присвоение» _ 'или удалив его. "

Любая помощь будет принята с благодарностью

Ответы [ 3 ]

0 голосов
/ 14 января 2020

Если необходимо активировать однократный таймер в viewDidLoad, он должен выглядеть примерно так:

class MyController: UIViewController {
    var timerToggle = 0

    private var timer: Timer?

    deinit {
        timer?.invalidate()
    }

    @objc func fireTimer() {
        timerToggle = 1
        timer = nil
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        timer = Timer.scheduledTimer(timeInterval: 5.0, target: self, 
            selector: #selector(fireTimer), userInfo: nil, repeats: false)
    }
}
0 голосов
/ 14 января 2020

Если вы больше не собираетесь получать доступ к таймеру, просто добавьте ниже к viewDidLoad

_ = Timer.scheduledTimer(timeInterval: 5.0, 
                         target: self, 
                         selector: #selector(fireTimer), 
                         userInfo: nil, 
                         repeats: false)
0 голосов
/ 14 января 2020

"Инициализация неизменяемого значения 'timer' никогда не использовалась; рассмотрите возможность замены присвоением '_' или удаления его." Это всего лишь предупреждение, а не ошибка. Вы все еще можете go опередить и инициализировать таймер в viewDidLoad.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...