Функция блокировки при достижении N нажатий в день - PullRequest
0 голосов
/ 20 октября 2019

Я пытаюсь добавить некоторый код, который блокирует или разблокирует функцию приложения в зависимости от того, сколько раз нажимается кнопка в день.

Поэтому я нажимаю кнопку, например, 3 раза, когда функция заблокированадо следующего дня. Я использую некоторый код для контроля времени, например:

// My dates:
NSDate * today = [NSDate date];
NSDate * yesterday = [[NSUserDefaults standardUserDefaults] objectForKey:@"YESTERDAY"];
NSDate * refDate; // your reference date

// 10 first characters of description is the calendar date:
NSString * todayString = [[today description] substringToIndex:10];
NSString * yesterdayString = [[yesterday description] substringToIndex:10];
NSString * refDateString = [[refDate description] substringToIndex:10];

if ([refDateString isEqualToString:todayString])  {
    NSLog(@"Today");

} else if ([refDateString isEqualToString:yesterdayString])  {
    NSLog(@"Yesterday");

} else  {
    NSLog(@"%@", refDateString);
}

Теперь я должен добавить действие кнопки, но это будет очень уродливая функция. Любой орган знает стручок для этих целей?

Ответы [ 2 ]

0 голосов
/ 20 октября 2019

Это моя последняя попытка использования функции, она возвращает ДА, если достигнут предел нажатий кнопок, и НЕТ, если она еще не достигнута.

- (BOOL)isContentLockedByTaps
{
    NSInteger buttonTaps = (NSInteger)[[[NSUserDefaults standardUserDefaults] objectForKey:@"buttonTaps"] integerValue] + 1;
    [[NSUserDefaults standardUserDefaults] setObject:[NSString stringWithFormat:@"%ld", buttonTaps] forKey:@"buttonTaps"];
    NSLog(@"#### buttonTaps: %ld", (long)buttonTaps);

    NSDate *lastTimeButtonTapDate = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"lastTimeButtonTapDate"];
    if(![[NSCalendar currentCalendar] isDateInToday:lastTimeButtonTapDate]){
        // Executed once per day. Save the first time the button is tapped.
        // And resets the button taps once per day.
        NSLog(@"#### Executed once per day");
        NSDate *today= [NSDate date];
        [[NSUserDefaults standardUserDefaults] setObject:today forKey:@"lastTimeButtonTapDate"];
        // Reset & Update button taps.
        buttonTaps = 0;
        [[NSUserDefaults standardUserDefaults] setObject:[NSString stringWithFormat:@"%ld", buttonTaps] forKey:@"buttonTaps"];
        // Content not locked
        return NO;

    }else{
        // Executed everytime except one time per day.
        NSLog(@"#### Executed everytime per day -1");
        if(buttonTaps > 3){
            NSLog(@"#### buttonTaps reached daily limit");
            // Content locked
            return YES;
        }else{
            NSLog(@"#### buttonTaps allowed");
            // Content not locked
            return NO;
        }
    }

    // Content locked by default
    return YES;
}
0 голосов
/ 20 октября 2019

Я нашел способ украсить функцию NSDate следующим образом:

NSDate *lastButtonDate = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"YESTERDAY"];
if(![[NSCalendar currentCalendar] isDateInToday:lastButtonDate]){
     // One day has passed away and we can store the new date
     NSDate *today= [NSDate date];
     [[NSUserDefaults standardUserDefaults] setObject:today forKey:@"YESTERDAY"];
}

Теперь мне нужно добавить часть кнопки, я имею в виду, n раз, чтобы заблокировать контент, который я хочу вызвать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...