良い一日!
Mac OS X (iPhone ではない) 用のリマインダー ソフトウェアを開発しています。1 日に 1 回ウィンドウを表示する必要があります。正確な時間は定義されておらず、1 回だけです。どうすればそれを作ることができますか。ログイン後に起動するように登録します。NSTimer を試してみましたが、最初のメソッドが起動した後に [timer setfFireDate:] を呼び出すと、メソッドが起動しないようです。
あなたの助けを楽しみにしています。
最新のコメントから、タイマーとユーザーのデフォルトの両方を使用する必要があるようです。ユーザーデフォルトメソッドは、最初に「firstOpening」と呼ばれるユーザーデフォルトがあるかどうかを確認し、ない場合は現在の時刻に設定します。これにより、20日間の試用期間の開始の時計が設定されます。その最初のif句は、プログラムが最初に開かれたときにのみ実行されます。
ユーザーのデフォルトから値を取得するプロパティfirstOpenTimeを作成し、それを使用して20日が経過したかどうかを確認します。有効期限が切れている場合、プログラムはpresentExpiredWindowメソッドを実行し、有効期限が切れていない場合は、リマインダーウィンドウを表示します。 24時間に1回実行される繰り返しタイマーを設定します。したがって、プログラムが常に開いている場合でも、タイマーは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
}