Swift- NSTimer 崩溃应用

Swift- NSTimer crashing app

在 Xcode 我有这个:

import UIKit
import AVFoundation
import Foundation

var position = 0
var gameTimer = NSTimer()

class ViewController: UIViewController {


        @IBAction func button(sender: AnyObject) {

            gameTimer = NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: "runTimedCode:", userInfo: nil, repeats: true)

            func runTimedCode() {

                position = Int(arc4random_uniform(11))


            }}}

当我 运行 这个应用程序崩溃并且 returns 错误:Thread 1: signal SIGABRT.

我有 运行 没有 NSTimer 的脚本,它运行良好。
我也 运行 它有和没有冒号,它 returns 相同的结果。

两期:

  • func runTimedCode() 置于 @IBAction button() 的范围之外。选择器/目标方法必须位于 class.

  • 的顶层
  • 要么删除 runTimedCode: 的冒号,要么将 runTimedCode 声明为 runTimedCode(timer: NSTimer)Selector中的每个冒号代表一个参数。

您有几个问题:

  1. 您已在 button 函数中定义了 runTimedCode 函数,而不是作为实例函数
  2. 您已经指定了正确的选择器签名 runTimedCode:(带冒号),但是您没有指定将发送到此函数的 NSTimer 参数(这是由 :在选择器中)。你想要:

import UIKit
import AVFoundation
 import Foundation

var position = 0
var gameTimer : NSTimer?  // Don't assign a value just to keep the compiler happy - if the variable is an optional declare it as such

class ViewController: UIViewController {


    @IBAction func button(sender: AnyObject) {

        self.gameTimer = NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: "runTimedCode:", userInfo: nil, repeats: true)

    }

    func runTimedCode(timer:NSTimer) {
            position = Int(arc4random_uniform(11))
    }
}