2016-05-01 13 views
0

私はまだ迅速に学習しています。アプリケーションを設計しようとしています。このゲームタイマーは7分に設定されています(クライアントの変更方法後で)、今は7時です。私は2つのボタンを追加しました。 開始、一時停止。私はスタートを許可したいと思っていました。カウントダウンを00:00まで開始してから、時間が過ぎているというメッセージをポップアップする予定でした。これまでNSTimerを迅速に使用してカウントダウン

コード:

import UIKit 

class ViewController: UIViewController { 
@IBOutlet var countDown: UILabel! 

var counter = 60 
var timer = NSTimer() 

func update() { 

    if counter > 0 { 
     countDown.text = String(counter--) 
    } 

} 

@IBAction func start(sender: UIButton) { 

    timer = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: #selector(ViewController.update), userInfo: nil, repeats: true) 

} 

@IBAction func pause(sender: UIButton) { 
    // timer.invalidate() stops the whole thing... 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

}

ただし、アプリがクラッシュし続けている...と私はどのように表現するかのように、タイマーを60秒以上を作る方法がわかりませんそれ。

+1

アプリがクラッシュするエラーを含めることができますか? –

+0

キャッチされていない例外 'NSInvalidArgumentException'のためアプリを終了します。理由: ' - [IwannaPlay.ViewController Start:]:インスタンスに送信された認識できないセレクタ0x7fd039c25820' –

+1

インターフェイスビルダの開始ボタンを確認してください。間違ったviewcontrollerとメソッドに結びついているようです - >(IwannaPlay.ViewController Start:]) – bpolat

答えて

5

これは私がカウントダウンタイマーを行う方法ではありません。

@IBAction func start(sender: UIButton) { 
    self.timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(ViewController.update(_:)), userInfo: nil, repeats: true) 
    NSRunLoop.currentRunLoop().addTimer(self.timer, forMode: NSRunLoopCommonModes) 
    startTime = NSDate() // new instance variable that you would need to add. 
} 

func update() { 
    let elapsedTime = NSDate().timeIntervalSinceDate(startTime) 
    let currTime = totalTime - elapsedTime 
    //total time is an instance variable that is the total amount of time in seconds that you want 
    countDown.text = String(currTime) 
    if currTime < 0 { 
     timer.invalidate() 
     //do other stuff that you need to do when time runs out. 
    } 
} 

また、IBActionコンセントがインターフェイスビルダーの右側にあることを確認してください。

+0

関数: せ経過時間= NSDate()timeIntervalSinceDate(のstartTime) せcurrTime = TOTALTIME - INT(経過時間) countDown.text =文字列(currTime) 場合currTime <0 { timer.invalidate() } –

+0

しかしアプリ。まだクラッシュしていますが、これは私が得るメッセージです: キャッチされていない例外 'NSInvali dArgumentException '、理由:' - [IwannaPlay.ViewController Start:]:インスタンスに送信された認識できないセレクタ0x7fd039c25820 ' –

+0

@AymanAbuassononこれは、使用したセレクタに問題があったことを意味します。 start関数、特に '#selector(ViewController.update(_ :))'行で私の更新されたコードを確認してください。しかし、エラーがあなたのインタフェースビルダーファイルにあるかもしれません。 IBActionが正しいことを確認してください。 –

関連する問題