iPhone注册时钟更新

时间:2012-07-09 21:03:19

标签: iphone objective-c nstimer clock

我的应用程序中的视图有一个时钟,我想与系统保持同步。许多Stack问题以NSTimer为中心,但在此之前,我想检查是否有可以注册的系统通知,每分钟都会触发一次。

这样的事情存在吗?我正在通过NSNotificationCenter查看,但到目前为止还没有。

4 个答案:

答案 0 :(得分:9)

您可以通过计算分钟的下一次更改来使用NSTimer的{​​{1}}来启动分钟:

initWithFireDate

答案 1 :(得分:2)

我知道没有NSNotificationCenter来电存在。它就像设置NSTimer一样简单。只要您将NSTimer设置为 1秒,您应该没问题。以下是我在其中一个应用中使用标签中的时间/日期的方式。

[NSTimer scheduledTimerWithTimeInterval:0.1 target:self 
                 selector:@selector(clockDateAndTime:) userInfo:nil repeats:YES];

-(void)clockDateAndTime:(NSTimer*)timer 
{
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    NSDate * date = [NSDate date];
    [formatter setDateFormat:@"MMM dd, yyyy hh:mm:ss a"];
    [lblLocalDate setText:[formatter stringFromDate:date]];
}

答案 2 :(得分:0)

上面beggs的答案是对的...这里是swift:

let dateComp = self.calendar.components(NSCalendarUnit.CalendarUnitDay | NSCalendarUnit.MonthCalendarUnit | NSCalendarUnit.YearCalendarUnit | NSCalendarUnit.CalendarUnitHour | NSCalendarUnit.CalendarUnitMinute | NSCalendarUnit.CalendarUnitSecond, fromDate: NSDate())
    dateComp.minute += 1
    dateComp.second = 0

    println(self.calendar.dateFromComponents(dateComp)!)
    let myTimer =  NSTimer(fireDate: self.calendar.dateFromComponents(dateComp)!, interval: 60, target: self, selector: "refreshCountdownNextMeal", userInfo: nil, repeats: true)
    let runloop = NSRunLoop.currentRunLoop()
    runloop.addTimer(myTimer, forMode: NSDefaultRunLoopMode)

我不必告诉你,每分钟拨一次计时器会更好,一分钟60次就好了吗? ; - )

答案 3 :(得分:0)

@beggs答案的更为文字的快速翻译:

let currentDate = NSDate()
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "ss";
let currentTimeSeconds = Double(dateFormatter.stringFromDate(currentDate))
let fireDate = NSDate(timeIntervalSinceNow: 60 - currentTimeSeconds!)

let timer = NSTimer(fireDate: fireDate, interval: 60, target: self, selector: "minuteLoop", userInfo: nil, repeats: true)
NSRunLoop.mainRunLoop().addTimer(timer, forMode: NSDefaultRunLoopMode)