0

良い一日!

Mac OS X (iPhone ではない) 用のリマインダー ソフトウェアを開発しています。1 日に 1 回ウィンドウを表示する必要があります。正確な時間は定義されておらず、1 回だけです。どうすればそれを作ることができますか。ログイン後に起動するように登録します。NSTimer を試してみましたが、最初のメソッドが起動した後に [timer setfFireDate:] を呼び出すと、メソッドが起動しないようです。

あなたの助けを楽しみにしています。

4

1 に答える 1

1

最新のコメントから、タイマーとユーザーのデフォルトの両方を使用する必要があるようです。ユーザーデフォルトメソッドは、最初に「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
}
于 2012-09-10T06:39:08.387 に答える