2015-07-12 7 views
0

Я пытаюсь сделать секундомер, и я не могу понять, почему я получаю сигабр с моим приложением. Извините, я не знал, что включить, поэтому я включил все.Sigabrt swift Xcode (создание таймера)

var timer = NSTimer() 
var minutes: Int = 0 
var seconds: Int = 0 
var fractions: Int = 0 
var startStopWatch: Bool = true 
var StopwatchString: String = "" 
@IBOutlet weak var display: UILabel! 

@IBAction func start(sender: UIButton) { 

    if startStopWatch == true { 
     NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: Selector("updateStopwatch"), userInfo: nil, repeats: true) 
     startStopWatch = false 
    } else { 
     timer.invalidate() 
     startStopWatch = true 
    } 
} 

@IBAction func reset(sender: UIButton) { 

} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    display.text = "00:00.00" 
} 

func updateStopWatch() { 
    fractions += 1 
    if fractions == 100 { 
     seconds += 1 
     fractions = 0 
    } 

    if seconds == 60 { 
     minutes += 1 
     seconds = 0 
    } 


    let fractionsString = fractions > 9 ? "\(fractions)" : "0\(fractions)" 
    let secondsString = seconds > 9 ? "\(seconds)" : "0\(seconds)" 
    let minutesString = minutes > 9 ? "\(minutes)" : "0\(minutes)" 
    StopwatchString = "\(minutesString):\(secondsString).\(fractionsString)" 
    display.text = StopwatchString 
} 
+0

FYI, ваш секундомер будет грубым неточным способом, как у вас есть настройка ... Лучше было бы сохранить, когда пользователь tapp (в объекте «NSDate»), а затем обновить метку на основе текущего времени минус время начала запуска пользователя. –

ответ

0

вырезать и вставить код в проект и когда я нажал на кнопку пуска первой линии сообщения об ошибке сказал:

- [My.ViewController updateStopwatch]: непризнанные селектор направлен пример 0x7fe0034b3520

Это говорит вам все, что вам нужно знать. Вы отправляете сообщение updateStopwatch на контроллер своего вида, но он не реализует этот метод. Я заметил, что ваш ViewController реализует метод updateStopWatch. Похоже на ошибку базовой капитализации.

Всегда, всегда, всегда, прочитайте хотя бы первую строку сообщения об ошибке.

0

Вот некоторые исправления:

+ Я изменил переменный таймер сначала всухую - это будет сохранен в функции запуска.

+ Ваш, если оператор в функции запуска выглядит следующим образом:

если startStopWatch == истинного
Но это должно быть так:

если (startStopWatch)

Надеется, что это helpes:)

var timer = nil 
var minutes = 0 
var seconds = 0 
var fractions = 0 
var startStopWatch = true 
var StopwatchString = "" 
@IBOutlet weak var display: UILabel! 

@IBAction func start(sender: UIButton) { 
    if (startStopWatch == true) { 
     timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: Selector("updateStopwatch"), userInfo: nil, repeats: true) 
     startStopWatch = false 
//I added one thing. If the start button is pushed the text will change to stop. You can change this if you like. 
     sender.setTitle("Stop", forState: .Normal) 
// 
    } else { 
     timer.invalidate() 
     startStopWatch = true 
    } 
} 

@IBAction func reset(sender: UIButton) { 
    display.text! = "00:00.00" 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    display.text! = "00:00.00" 
} 

func updateStopWatch() { 
    fractions++ 
    if (fractions == 100) { 
     seconds++ 
     fractions = 0 
    } 

    if (seconds == 60) { 
     minutes++ 
     seconds = 0 
    } 


    var fractionsString = fractions > 9 ? "\(fractions)" : "0\(fractions)" 
    var secondsString = seconds > 9 ? "\(seconds)" : "0\(seconds)" 
    var minutesString = minutes > 9 ? "\(minutes)" : "0\(minutes)" 
    StopwatchString = "\(minutesString):\(secondsString).\(fractionsString)" 
    display.text! = StopwatchString 
} 
+0

Это должно было быть отредактировано не ответом –