Search code examples
debuggingswiftnstimer

Trouble Debugging NSTimer


I am trying to have an image show up for 1 second and disappear after the 1 second is up. When I build my app it works fine but when I run my app it crashes. Here is my code:

var flashTimer = NSTimer()
var timerCounter = 0
var currentTime = 0
var randomImageGeneratorNumber = 0
var flashingImageView = UIImageView()
var flashButton = UIButton()

@IBAction func flashButton(sender: UIButton) {

    var randomImageGeneratorNumber = arc4random_uniform(6) + 1
    if flashButton.hidden {
        flashButton.hidden = true
        flashingImageView.hidden = false
    }
    if randomImageGeneratorNumber == 1 {
        flashingImageView.image = UIImage(named: "Image1.png")
    }
    if randomImageGeneratorNumber == 2 {
        flashingImageView.image = UIImage(named: "Image2.png")
    }
    if randomImageGeneratorNumber == 3 {
        flashingImageView.image = UIImage(named: "Image3.png")
    }
    if randomImageGeneratorNumber == 4 {
        flashingImageView.image = UIImage(named: "Image4.png")
    }
    if randomImageGeneratorNumber == 5 {
        flashingImageView.image = UIImage(named: "Image5.png")
    }
    if randomImageGeneratorNumber == 6 {
        flashingImageView.image = UIImage(named: "Image6.png")
    }
    var currentTime = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "timerFunc", userInfo: nil, repeats: false)
    func timerFunc(sender: AnyObject){
        flashingImageView.hidden = true;
    }
}

The error in the debugger output is: [Flash_Facts.ViewController timerFunc]: unrecognized selector sent to instance 0x7f9ceb774810

I am not sure how to fix this. Any suggestions?

Thanks in advance.


Solution

  • The problem is that you have to create your function outside the IBAction function. The same applies to your timer var ( currentTime )

    var currentTime = NSTimer()
    func timerFunc() {
         flashButton.hidden = !flashButton.hidden
         flashingImageView.hidden = !flashingImageView.hidden
    }
    @IBAction func flashButton(sender: UIButton) {
         flashButton.hidden = !flashButton.hidden
         flashingImageView.hidden = !flashingImageView.hidden
         flashingImageView.image = UIImage(named: "Image\(arc4random_uniform(6) + 1).png")
         currentTime = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "timerFunc", userInfo: nil, repeats: false)
    
    }