我正在开发iPhone应用程序,我在一个点卡住了,
我想做的是,
当用户在一天中第一次启动应用程序时,我想向他显示一些警报。当他在同一天内第二次打开一个应用程序时,它不会收到提醒。(他只会在当天第一次发布应用程序时收到提醒)。
第二天,如果他再次打开应用程序,他将收到警报,第二次他将不会收到警报。
简而言之:用户应该在每天的第一次发布时获得警报。
有任何想法,我应该如何实现这一点吗? 提前谢谢。
我对NSDate
有一个有用的分类,其中包括以下方法:
- (BOOL)isOnTheSameDayAs:(NSDate *)date
{
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components1 = [calendar components:(NSYearCalendarUnit| NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSWeekdayCalendarUnit | NSWeekdayOrdinalCalendarUnit) fromDate:self];
NSDateComponents *components2 = [calendar components:NSYearCalendarUnit| NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSWeekdayCalendarUnit | NSWeekdayOrdinalCalendarUnit fromDate:date];
return ((components1.year == components2.year) &&
(components1.month == components2.month) &&
(components1.day == components2.day));
}
- (BOOL)isToday
{
return [self isOnTheSameDayAs:[NSDate date]];
}
做最必要的事情。稍后在app委托中,我将放置字段NSDate * lastReloadDate
,我将初始化为"day zero"。最后一个动作:
- (void)applicationDidBecomeActive:(UIApplication *)application {
if (![self.lastLoadDate isToday]) {
// Show error here and don't forget to hide previous alert view or use singleton for UIALertView.
self.lastLoadDate = [NSDate date];
}
}
- (NSDate *)lastLoadDate {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSDate *d = [defaults objectForKey:@"LastReload"];
return d == nil ? [NSDate dateWithTimeIntervalSince1970:0] : d;
}
- (void)setLastLoadDate:(NSDate *)d {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:d forKey:@"LastReload"];
}
首先,你需要测试应用是否在一天内首次打开。如果你能做到这一点,那么一天只显示一次警报是非常容易的
//Check for new day
if (condition) {
//For every new day you will clear the user default value
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"AlertShownToday"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
//Below code will check wether the alert is shown for the day or not and accordingly will show alert
if (![[[NSUserDefaults standardUserDefaults] valueForKey:@"AlertShownToday"] boolValue]) {
//Show Alert
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Test" message:@"Message" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alert show];
//Save in userdefault that alert has been shown
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"AlertShownToday"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
在didFinishLaunchingWithOptions方法中使用上面的代码
希望这对你有帮助。Happy Coding:)
当用户启动应用程序时,可以将currentDate
存储在NSUserDefaults
中。现在,每当用户启动应用程序时,比较NSUserDefaults
中的currentDate
和storedDate
。
if (currentDate != [[NSUserDefaults standardUserDefaults] objectForKey:@"LastDate"]) {
currentDate = [NSString stringWithFormat:@"%f",[NSDate date]];
UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"Day Changed" message:@"Welcome Back!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
}
希望这有帮助!!