NSTimer没有更新标签

时间:2014-10-23 01:12:56

标签: ios cocoa-touch swift nstimer

所以我试图每1秒钟刷新一次功能,以便更新标签,不幸的是它不会因某种原因而触发。代码如下以及评论。

import UIKit


class ViewController: UIViewController {

    @IBOutlet var tt_CountDown: UILabel!


    var tt_currentDate = NSDate()
    var tt_objCalendar = NSCalendar.currentCalendar()


    override func viewDidLoad() {
        super.viewDidLoad()

        self.timeClassManagement()

       //The timer I'm using to call the function to repeat
        var timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("timeClassManagement"), userInfo: nil, repeats: true)

    }

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

    func timeClassManagement(){
        //the function that holds the code for the label below
        tt_CountDown.text = "\(String(tt_hour)):\(String(tt_minute)):\(String(tt_second))"

    }



}

2 个答案:

答案 0 :(得分:3)

问题不在于他没有调用其动作方法的计时器;这工作正常。问题在于您用于更新标签的代码(来自我们的聊天)。

func timeClassManagement(){ 
var tt_objDateFormat = tt_objCalendar.components( .CalendarUnitHour | .CalendarUnitMinute | .CalendarUnitSecond, fromDate: tt_currentDate) 

var tt_hour = tt_objDateFormat.hour 
var tt_minute = tt_objDateFormat.minute 
var tt_second = tt_objDateFormat.second 

tt_CountDown.text = "\(String(tt_hour)):\(String(tt_minute)):\(String(tt_second))" 

}

每次调用方法时,您使用的日期tt_currentDate都是相同的。您需要传入当前日期,以便更改。

var tt_objDateFormat = tt_objCalendar.components( .CalendarUnitHour | .CalendarUnitMinute | .CalendarUnitSecond, fromDate:NSDate.date())

答案 1 :(得分:1)

只需将函数名的字符串传递给NSTimer init即可。选择器是一个ObjC构造,接受选择器的方法可以在Swift中给出字符串。

首先timer应该是属性。它会在viewDidLoad结束时消失。

timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "timeClassManagement", userInfo: nil, repeats: true)

在类似问题的答案中提供了更多详细信息:请参阅此处的答案:https://stackoverflow.com/a/24007718/3879