美好的一天!每天安排一次方法可可
我正在開發Mac OS X(不是iPhone)的提醒軟件。它應該在一天中提供一次窗口。 確切的時間沒有定義,只是一次。我怎麼做到的。它註冊自己以便在登錄後啓動。我嘗試過NSTimer,但它看起來像在第一個方法觸發後調用 [timer setfFireDate:]時不會觸發一種方法。
期待您的幫助。
美好的一天!每天安排一次方法可可
我正在開發Mac OS X(不是iPhone)的提醒軟件。它應該在一天中提供一次窗口。 確切的時間沒有定義,只是一次。我怎麼做到的。它註冊自己以便在登錄後啓動。我嘗試過NSTimer,但它看起來像在第一個方法觸發後調用 [timer setfFireDate:]時不會觸發一種方法。
期待您的幫助。
從您的最新評論看來,您似乎需要同時使用計時器和用戶默認設置。用戶的默認方法首先檢查是否有用戶默認稱爲「firstOpening」,如果沒有將其設置爲當前時間 - 這將設置20天試用期開始的時鐘。第一個if子句只會在程序第一次打開時運行。
我創建了一個屬性firstOpenTime,它從用戶默認值中檢索值,並使用它來檢查20天是否已過期 - 如果是,程序將運行presentExpiredWindow方法,如果不是,則會顯示提醒窗口,並設置一個每24小時運行一次的重複計時器。因此,即使程序始終保持打開狀態,定時器應該每24小時觸發一次以顯示提醒窗口(除非20天過去,然後timer方法調用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
}
你是什麼意思「第一種方法之後」?它會一次點燃嗎?這款應用程序是否會始終運行在一臺始終運行的計算機上?真的不清楚你在這裏做什麼。 – rdelmar
對不清楚的問題。是的,它只會觸發一次,然後不會。在登錄開始項目中註冊的軟件,因此它將與系統一起開始,然後檢查自首次啓動以來的過去的幾天,然後觸發一個方法來顯示提示窗口「Please register,bla,bla,bla」。 – Vlad