0

再会!

我正在为 Mac OS X(不是 iPhone)开发提醒软件。它应该在一天内显示一个窗口。具体时间没有规定,只有一次。我怎样才能做到。它注册自己以在登录后启动。我已经尝试过 NSTimer,但是当我在第一个方法触发后调用 [timer setfFireDate:] 时,它看起来没有触发方法。

期待您的帮助。

4

1 回答 1

1

从您的最新评论来看,您似乎需要同时使用计时器和用户默认值。用户默认方法首先检查是否存在名为“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
}
于 2012-09-10T06:39:08.387 回答