再会!
我正在为 Mac OS X(不是 iPhone)开发提醒软件。它应该在一天内显示一个窗口。具体时间没有规定,只有一次。我怎样才能做到。它注册自己以在登录后启动。我已经尝试过 NSTimer,但是当我在第一个方法触发后调用 [timer setfFireDate:] 时,它看起来没有触发方法。
期待您的帮助。
从您的最新评论来看,您似乎需要同时使用计时器和用户默认值。用户默认方法首先检查是否存在名为“firstOpening”的用户默认设置,如果没有,则将其设置为当前时间——这将为您的 20 天试用期的开始设置时钟。第一个 if 子句只会在程序第一次打开时运行。
我创建了一个属性 firstOpenTime,它从用户默认值中检索值,并使用它来检查 20 天是否已过期——如果是,程序运行 presentExpiredWindow 方法,如果没有,它会显示提醒窗口,并且设置一个每 24 小时运行一次的重复计时器。因此,即使程序一直保持打开状态,计时器也应每 24 小时触发一次以显示提醒窗口(除非 20 天已过,然后计时器方法调用 showExpiredWindow 方法并使其自身无效)。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{
if (![[NSUserDefaults standardUserDefaults] objectForKey:@"firstOpening"] ){
[[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:@"firstOpening"];
}
self.firstOpenTime = [[NSUserDefaults standardUserDefaults] objectForKey:@"firstOpening"];
if ([[NSDate date] timeIntervalSinceDate:self.firstOpenTime] > 1728000) { //1,728,000 seconds is 20 days
[self presentExpiredWindow];
}else{
[self presentReminderWindow];
[NSTimer scheduledTimerWithTimeInterval:86400 target:self selector:@selector(presentReminder:) userInfo:nil repeats:YES];
}
}
-(void)presentReminder:(NSTimer *) aTimer {
if ([[NSDate date] timeIntervalSinceDate:self.firstOpenTime] > 1728000) {
[self presentExpiredWindow];
[aTimer invalidate];
}else{
[self presentReminderWindow];
}
}
-(void)presentReminderWindow {
//show reminder window
}
-(void)presentExpiredWindow {
//show trial period has ended window
}