2016-01-26 1 views
0

Я пытаюсь использовать NSTimer для запуска функции на определенном интервале, но каждый раз, когда он запускает программу аварии с исключением:Непризнанный селектор, отправленный классу при использовании NSTimer в Swift; NSInvalidArgumentException

+[Project.Class updateLabel]: unrecognized selector sent to class... 
Terminating app due to uncaught exception "NSInvalidArgumentException". 

Код следующим образом:

class SecondViewController: UIViewController { 

// MARK: Properties 

override func viewDidLoad() { 
    super.viewDidLoad() 

    do { 
     try updateLabel() 
     try startTimer() 
    } 
    catch{ 
     self.showAlert() 
    } 
} 

@IBOutlet weak var i2cLabel: UILabel! 

// MARK: Actions 

func startTimer() throws { 
    _ = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("updateLabel"), userInfo: nil, repeats: true) 

} 

func showAlert() { 
} 

func updateLabel() throws { 
} 
} 

Если я прокомментирую строку NSTimer, программа компилируется и работает просто отлично.

Обратите внимание, что функция updateLabel(), селекторная функция, не принимает аргументов, поэтому ее следует использовать как селектор без суффикса двоеточия. Это кажется уникальным для этой проблемы.

+0

Отредактировано, чтобы объяснить, как эта проблема уникальна. –

ответ

1

Попробуйте обновить свой код на:

override func viewDidLoad() { 
    super.viewDidLoad() 

    do { 
     updateLabel() 
     try startTimer() 
    } 
    catch{ 
     self.showAlert() 
    } 
} 


// MARK: Actions 

func startTimer() throws { 
    _ = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("updateLabel"), userInfo: nil, repeats: true) 

} 

func showAlert() { 
} 

func updateLabel() { 

} 

Кажется, что: NSTimer не знаю, вызвать функцию throws. Так что это сбой.

Я попытался найти чиновника или статью о нем. Но грустно, что я не могу найти сейчас.

Вы можете ссылаться на этот вопрос: Reference

Надежда эта помощь!