指定した期間内にアクセスすると1度だけダイアログを出すプログラムを作ってみた
こんな感じで
EventDateRecorder.h
#import <Foundation/Foundation.h>
@interface EventDateRecorder : NSObject
+ (BOOL)christmasEventDateRecorder;
@end
EventDateRecorder.m
#import "EventDateRecorder.h"
// ダイアログ表示期間
static NSString *const chrismasEventDateKey = @"chrismasEventDate";
static NSString *const chrismasfromDateString = @"2015-12-25 00:00:00";
static NSString *const chrismasAfterDateString = @"2015-12-26 00:00:00";
@implementation EventDateRecorder
+ (BOOL)chrismasEventDateRecorder
{
BOOL isChrismasEvent = [self eventDateRecorderWithKey:chrismasEventDateKey fromDateString:chrismasfromDateString afterDateString:chrismasAfterDateString];
return isChrismasEvent;
}
+ (BOOL)eventDateRecorderWithKey:(NSString *)eventKey fromDateString:(NSString *)fromDateString afterDateString:(NSString *)afterDateString
{
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSDate *fromDate = [formatter dateFromString:fromDateString];
NSDate *afterDate = [formatter dateFromString:afterDateString];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSDate *eventDate = [defaults objectForKey:eventKey];
NSDate *now = [NSDate dateWithTimeIntervalSinceNow:[[NSTimeZone systemTimeZone] secondsFromGMT]];
if ([now compare:fromDate] == NSOrderedDescending && [now compare:afterDate] == NSOrderedAscending) {
if (eventDate) {
if([eventDate compare:fromDate] == NSOrderedDescending && [eventDate compare:afterDate] == NSOrderedAscending) {
return NO;
} else {
[defaults setObject:now forKey:eventKey];
[defaults synchronize];
return YES;
}
} else {
[defaults setObject:now forKey:eventKey];
[defaults synchronize];
return YES;
}
} else {
return NO;
}
}
@end
使い方は
BOOL isChrismasEvent = [EventDateRecorder chrismasEventDateRecorder];
if (isChrismasEvent) {
//YESが返ってきた時の処理;
} else {
}