initWithFireDate每天重复

时间:2013-04-29 16:09:16

标签: objective-c macos nstimer

此应用程序适用于OSX。我正在使用NSTimer在一天的某个特定时间运行方法。

    NSCalendar* myCalendar = [NSCalendar currentCalendar];
NSDateComponents* components = [myCalendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit
                                             fromDate:[NSDate date]];
[components setHour:9];
[components setMinute:30];
[components setSecond:0];
NSDate *date = [myCalendar dateFromComponents:components];

NSTimer *t = [[NSTimer alloc] initWithFireDate:date
                                      interval:0.0
                                        target:self
                                      selector:@selector(fired:)
                                      userInfo:nil
                                       repeats:NO];
[[NSRunLoop mainRunLoop] addTimer:t forMode:NSDefaultRunLoopMode];

我怎样才能每天重复这个?

2 个答案:

答案 0 :(得分:1)

interval:86400
repeats:YES

或者

使用提醒

将事件添加到用户日历

或者

山狮当地通知 http://www.renssies.nl/2012/02/mountain-lion-the-new-notifications-center/

答案 1 :(得分:-1)

NSTimer不适合您想要实现的目标!

相反,请查看OS X 10.8中引入的EKReminder类或NSUserNotification

如果您必须定位早期版本的OS X,请查找涉及EKCalendar的其他选项,或考虑为您处理日期数学的其他服务(IIRC,launchd有一个时间概念,所以应该有其他一些高级API。)

有几个WWDC会议视频处理这些事情 - 包括“事件工具包中的事件和提醒”,以及去年的“国际化提示和技巧”部分。