2012-09-08 86 views
0

美好的一天!每天安排一次方法可可

我正在開發Mac OS X(不是iPhone)的提醒軟件。它應該在一天中提供一次窗口。 確切的時間沒有定義,只是一次。我怎麼做到的。它註冊自己以便在登錄後啓動。我嘗試過NSTimer,但它看起來像在第一個方法觸發後調用 [timer setfFireDate:]時不會觸發一種方法。

期待您的幫助。

+0

你是什麼意思「第一種方法之後」?它會一次點燃嗎?這款應用程序是否會始終運行在一臺始終運行的計算機上?真的不清楚你在這裏做什麼。 – rdelmar

+0

對不清楚的問題。是的,它只會觸發一次,然後不會。在登錄開始項目中註冊的軟件,因此它將與系統一起開始,然後檢查自首次啓動以來的過去的幾天,然後觸發一個方法來顯示提示窗口「Please register,bla,bla,bla」。 – Vlad

回答

1

從您的最新評論看來,您似乎需要同時使用計時器和用戶默認設置。用戶的默認方法首先檢查是否有用戶默認稱爲「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 
} 
+0

感謝您的回答。對不起我的英文。但我只需要以下。該軟件將自動啓動,並在20天后會顯示「您的試用期結束」,並出現一個窗口「請註冊」。但是,計算機可能會在一週內工作,而無需關閉,軟件仍然需要每天一次觸發一種方法。 – Vlad

+0

@Vlad,我想我現在明白了,看到我編輯的代碼。 – rdelmar

+0

非常感謝,我正在尋找 – Vlad

相關問題