すでに提案したように、私は解決策を構築しますNSDate *now = [NSDate date];
ボタンがクリックされるたびに、アクション メソッド内で、このような日付オブジェクトを作成し、それを配列に追加します (配列はクラス プロパティまたはクラス内部変数です)。
NSMutableArray *clicksOf60Minutes; // can be initialized with alloc/initWithCapacity:501;
容量は 550 かそこらになる可能性があります。いくつかのテストを行い、適切な値を探します。むしろ、パフォーマンスとメモリ管理の問題です。初期化に選択した値に関係なく、コードは機能します。
1 つ追加した後 (将来の評価のためにいずれにせよ 1 つ追加します)、配列から 60 分より古いすべての objectc を削除します。
do {
[clicksOf60Minutes removeObjectAtIndex:0];
} while ([[clicksOf60Minutes removeObjectAtIndex:0] timeIntervalSinceDate:firstDate]>3600]);
do/while
が間違ったループであり、より優れている場合でも、私に怒鳴らないでくださいwhile
。最初に条件を評価し、条件が前もって真であった場合にのみループの本体を実行するものでなければなりません。私があまり間違っていなければ、これは正しいものです。再確認してください。これが完了すると、配列は過去 60 分間に発生したクリックの瞬間のみで構成されます。次に、その番号を確認します。
if ([clicksOf60Minutes count] > 500) {
// add points
} else {
// show altert
}